如何在android版OpenCV上转换灰色(单色)ROI?
如何在OpenCV for android上转换灰色(单色)ROI 我试过了,但不起作用:如何在android版OpenCV上转换灰色(单色)ROI?,android,opencv,Android,Opencv,如何在OpenCV for android上转换灰色(单色)ROI 我试过了,但不起作用: public Mat onCameraFrame(CvCameraViewFrame inputFrame) { Mat image = inputFrame.rgba(); Rect roi = new Rect(300, 50, 50, 10); Mat sub =image.submat(roi); Imgproc.cvtColor(sub, sub, Imgproc.CO
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
Mat image = inputFrame.rgba();
Rect roi = new Rect(300, 50, 50, 10);
Mat sub =image.submat(roi);
Imgproc.cvtColor(sub, sub, Imgproc.COLOR_RGBA2GRAY);
sub.copyTo(image.submat(roi));
return image;
}
及
}上述代码中的问题是,您试图将单通道Mat(灰色)复制到多通道Mat(RGBA) 所以,在复制回原始RGBA图像之前,需要将灰度转换为RGBA 将代码更改为
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
Mat image = inputFrame.rgba();
Rect roi = new Rect(300, 50, 50, 10);
Mat sub =image.submat(roi);
Imgproc.cvtColor(sub, sub, Imgproc.COLOR_RGBA2GRAY);
Imgproc.cvtColor(sub, sub, Imgproc.COLOR_GRAY2RGBA);
sub.copyTo(image.submat(roi));
return image;
}
哈里斯发现问题是对的,但他提供的解决方案是不必要的。在原始代码中,无需将
sub
复制回image
,此行:
//sub.copyTo(image.submat(roi));
因为这样更改sub
:
Imgproc.cvtColor(sub, sub, Imgproc.COLOR_RGBA2GRAY, 4);
也将改变图像
。之所以会出现这种情况,是因为调用submat
不会创建新图像,它只会使用原始图像创建一个参考区域
因此,要在彩色图像中有一个灰色区域,您需要做的就是:
Mat image = inputFrame.rgba();
Rect roi = new Rect(300, 50, 50, 10);
Mat sub = image.submat(roi);
Imgproc.cvtColor(sub, sub, Imgproc.COLOR_RGBA2GRAY, 4);
请注意cvtColor
的最后一个参数,即通道数。Rgba有4个通道
Mat image = inputFrame.rgba();
Rect roi = new Rect(300, 50, 50, 10);
Mat sub = image.submat(roi);
Imgproc.cvtColor(sub, sub, Imgproc.COLOR_RGBA2GRAY, 4);