Android上的OpenCV转换为灰度无法正常工作

Pax*_*x0r 5 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);
Run Code Online (Sandbox Code Playgroud)

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

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

Kar*_*nan 7

如果位图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);
Run Code Online (Sandbox Code Playgroud)