我正在尝试将一些 OpenCV Mat 转换为灰度用于轮廓检测算法。由于某种原因,转换后的图像全黑。我的代码(b是Android位图):
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 保存位图 - 它仍然是全黑的,所以问题是 100% 在 cvtColor ...