flutter 接入OpenCV遇到的问题

官方给的openCv工程需要自身下载,简单处理后,我建议是以module的形式import进Android工程,下面说说遇到的问题。
另外,若调用Android 底层的东西时,最后在这里建议选择Open for Editing in Android Studio

  1. 一直提示需要安装openCv Manager
    切换到Android studio运行试下,先运行起来是没问题的。
  2. 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成为了手机的主流,所以这是需要解决的矛盾…

  1. 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包的形式导入工程里,那样工程运行时会一并进行初始化。

  1. 打不开相机
    提示不支持相机或者没有相机,是因为没有给相关权限,打开手机:设置=》权限管理=》自己的app,手动给予权限,查看效果;另外,可以主动添加权限管理插件:simple_permissions
  2. 相机打开后,画面旋转九十度
    有的说是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);
            }

        }
    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值