项目场景:
c++写的opencv算法,移植到android上,发现输出结果和输出效率不一致
问题描述
在visual studio上执行的结果和android studio上执行的结果不一致,后来发现android studio输入的Mat尺寸比visual studio输入的mat尺寸大很多。
//方法1 Bitmap转Mat bitmap_normal = BitmapFactory.decodeResource(getResources(), R.drawable.normal); Mat bmpMat = new Mat(); Utils.bitmapToMat(bitmap_normal, bmpMat);//转换为后是RGBA 4 通道 Log.d("HAHA","bitmap转mat: "+ "mat.cols = "+ bmpMat.cols() + " mat.rows = " + bmpMat.rows());
bitmap转mat: mat.cols = 5280 mat.rows = 2970
visual studio是用Imread从电脑硬盘读取照片,打印结果是mat.cols = 1920 mat.rows = 1080
原因分析:
因为visual studio写的opencv算法是哈特曼算法,要计算的数据量比较大,比较费时间,如果传入mat尺寸比较大的话,会增加很多工作量
解决方案:
//方法2 直接mat加载图片 Mat bmpMat1 = new Mat(); try { bmpMat1 = Utils.loadResource(this, R.drawable.normal);//图片名称 } catch (IOException e) { e.printStackTrace(); }我们换一种方式,直接Mat加载图片,并进行打印
2022-08-16 14:14:35.989 19187-19187/com.example.myhatemantest D/HAHA: bitmap转mat: mat.cols = 5280 mat.rows = 2970
2022-08-16 14:14:36.010 19187-19187/com.example.myhatemantest D/HAHA: 直接mat加载图片: mat.cols = 1920 mat.rows = 1080
通过比对结果,发现第二种方法获取的mat尺寸小很多,并且和visual studio中打印的尺寸一致,问题解决