如何使用OpenCV Java将矩形(ROI)的颜色转换为矩阵?

5
我正在尝试使用以下代码在OpenCV Java中将矩阵ROI中的颜色转换:

public Mat detect(Mat image){
    Rect roi = new Rect(new Point(50, 50), new Point(image.width() - 50, image.height() - 50));
    Mat mask = image.submat(roi);
    Mat temp = new Mat();
    Imgproc.cvtColor(mask, temp, Imgproc.COLOR_BGRA2GRAY,0);
    temp.copyTo(mask);
    return image;
}

但是结果与给定的图像相同。例如,如果我将Imgproc.cvtColor()调用更改为Imgproc.medianBlur()效果:
    ...
    Imgproc.medianBlur(mask, temp, 11);
    ... 

有一个模糊的矩形可见。我认为在Imgproc.cvtColor()的过程中,对原始图像的引用被一些新创建的引用所替换。那么,我如何在不丢失引用的情况下转换矩阵中ROI的颜色呢?
感谢任何帮助,谢谢!
附言:我想添加一些示例图像,但我的声望还不够高。对此我很抱歉,希望您即使没有示例也能想象我的问题。
1个回答

1
你不能有一张图像,它是1通道的一部分,而另一部分是4通道。
模糊示例效果很好,因为它没有改变通道数。
在复制之前,你需要将灰色(子)图像再次转换为RGBA。
Mat temp = new Mat();
Imgproc.cvtColor(mask, temp, Imgproc.COLOR_BGRA2GRAY,0);
Mat temp_rgba = new Mat();
Imgproc.cvtColor(temp, temp_rgba, Imgproc.COLOR_GRAY2BGRA,0);
temp_rgba.copyTo(mask);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接