我正在尝试将一些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