android studio bitmap转mat之后输入c++的opencv算法报错问题

项目场景:

将visual studio生成的opencv算法通过android studio打包成.so和.jar文件,供另一个安卓工程使用。


问题描述

函数运行不成功,报错

生成.so工程代码片段

//将RGB图转为灰度图
if (srcImgs.img_0.channels() == 3)
    cvtColor(srcImgs.img_0, srcImgs.img_0, COLOR_RGB2GRAY);
if (srcImgs.img.channels() == 3)
    cvtColor(srcImgs.img, srcImgs.img, COLOR_RGB2GRAY);

//二值化
Mat binary_0 = hateman_binaryzation(srcImgs.img_0);
Mat binary = hateman_binaryzation(srcImgs.img);

安卓工程调用的代码片段

bitmap_normal = BitmapFactory.decodeResource(getResources(), R.drawable.normal);
Mat bmpMat = new Mat();
Utils.bitmapToMat(bitmap_normal, bmpMat);

原因分析:

1、android 的opencv sdk和 c++的opencv sdk存在一些差异,一些函数返回的结果可能不同,也有可能是二者版本不一致

2、vs中代码跑通,as不行,忽略了一些细节

比如进行二值化时需要传入的是灰度图像,如果将RGB转灰度函数没有调用,就会出现问题,因此分析可能是通道数不是3


解决方案:

1、将c++ opencv库和java opencv库版本保持一致

2、打印获取到的通道数,看看是不是3

二者版本保持一致后,调用函数还是出错,然后打印获取到的通道数,发现结果是4,经百度发现,安卓的bitmap转mat函数调用后,通道是4,默认是CV_8UC4类型,即RGBA 4通道,将判断改为srcImgs.img_0.channels() == 4后,调用函数不再报错,问题解决。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值