java环境opencv灰度化闪退_java – Android上的OpenCV转换为灰度无法正常工作

我正在尝试将一些OpenCV Mat转换为灰度以用于Contours检测算法.由于某种原因,转换后的图像全黑.我的代码(b是Android Bitmap):

Mat tmp = new Mat (b.getWidth(), b.getHeight(), CvType.CV_8UC1);

Utils.bitmapToMat(b, tmp);

Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_BGR2GRAY);

//there could be some processing

Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_GRAY2BGRA, 4);

Utils.matToBitmap(tmp, b);

现在我正在绘制这个位图,它全是黑色的.当我将轮廓检测应用于此位图(代替注释)时没有匹配,所以我认为问题在于转换.删除转换后(只需调用bitmapToMat和matToBitmap),然后位图不是全黑的,所以转换为Mat也有效.位图在ARGB_8888中并且没有错误,只是输出位图全黑.

编辑:只是为了确保我尝试使用ocv imwrite保存位图 – 它仍然全黑,所以问题是在cvtColor 100%…

解决方法:

如果位图b来自android设备,则尝试使用COLOR_RGB2GRAY而不是COLOR_BGR2GRAY,因为BGR是OpenCV图像的默认像素格式,而不是所有图像.

试试这段代码:

Mat tmp = new Mat (b.getWidth(), b.getHeight(), CvType.CV_8UC1);

Utils.bitmapToMat(b, tmp);

Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_RGB2GRAY);

//there could be some processing

Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_GRAY2RGB, 4);

Utils.matToBitmap(tmp, b);

标签:java,android,opencv

来源: https://codeday.me/bug/20190529/1178778.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值