官方给的openCv工程需要自身下载,简单处理后,我建议是以module的形式import进Android工程,下面说说遇到的问题。
另外,若调用Android 底层的东西时,最后在这里建议选择Open for Editing in Android Studio
。
- 一直提示需要安装openCv Manager
切换到Android studio运行试下,先运行起来是没问题的。 - couldn’t find libflutter.so
在加入jniLibs 时,总是报
Process: com.smart.flutteracesmart, PID: 31882
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.smart.flutteracesmart-1/base.apk"],nativeLibraryDirectories=[/data/app/com.smart.flutteracesmart-1/lib/arm64, /data/app/com.smart.flutteracesmart-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]] couldn't find "libflutter.so"
首先,在该文件夹下只留armeabi-v7a
然后,按图片里进行配置
但是有个问题,就是现在armeab64成为了手机的主流,所以这是需要解决的矛盾…
- OpenCV error: Cannot load info library for OpenCV
看下这个log日志打印的位置是:
try
{
System.loadLibrary("opencv_info");
libs = getLibraryList();
}
catch(UnsatisfiedLinkError e)
{
Log.e(TAG, "OpenCV error: Cannot load info library for OpenCV");
}
如果你的jni包已经准备完备,没有的话可以到这里下载;不要相信别人说的是没有opencv_info;已经把资源放到工程里了,只是说没有被调用;建议,以module或者jar包的形式导入工程里,那样工程运行时会一并进行初始化。
- 打不开相机
提示不支持相机或者没有相机,是因为没有给相关权限,打开手机:设置=》权限管理=》自己的app,手动给予权限,查看效果;另外,可以主动添加权限管理插件:simple_permissions - 相机打开后,画面旋转九十度
有的说是AndroidManifest.xml
文件中,为相机activity添加屏幕属性
android:screenOrientation=" portrait"
对于我来说,是没卵用,所以选择了下面这个方法,实现全屏相机:
找到deliverAndDrawFrame方法,并作修改
protected void deliverAndDrawFrame(CvCameraViewFrame frame) {
Mat modified;
if (mListener != null) {
modified = mListener.onCameraFrame(frame);
} else {
modified = frame.rgba();
}
boolean bmpValid = true;
if (modified != null) {
try {
Utils.matToBitmap(modified, mCacheBitmap);
} catch (Exception e) {
Log.e(TAG, "Mat type: " + modified);
Log.e(TAG, "Bitmap type: " + mCacheBitmap.getWidth() + "*" + mCacheBitmap.getHeight());
Log.e(TAG, "Utils.matToBitmap() throws an exception: " + e.getMessage());
bmpValid = false;
}
}
if (bmpValid && mCacheBitmap != null) {
Canvas canvas = getHolder().lockCanvas();
if (canvas != null) {
canvas.drawColor(0, android.graphics.PorterDuff.Mode.CLEAR);
if (BuildConfig.DEBUG)
Log.d(TAG, "mStretch value: " + mScale);
// ===修改这里解决预览旋转90度问题
canvas.rotate(90, 0, 0);
float scale = canvas.getWidth() / (float) mCacheBitmap.getHeight();
float scale2 = canvas.getHeight() / (float) mCacheBitmap.getWidth();
if (scale2 > scale) {
scale = scale2;
}
if (scale != 0) {
canvas.scale(scale, scale, 0, 0);
}
canvas.drawBitmap(mCacheBitmap, 0, -mCacheBitmap.getHeight(), null);
// ===结束这里解决预览旋转90度问题end
if (mFpsMeter != null) {
mFpsMeter.measure();
mFpsMeter.draw(canvas, 20, 30);
}
getHolder().unlockCanvasAndPost(canvas);
}
}
}