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.medianBlur() 效果更改 Imgproc.cvtColor() 调用,例如:

    ...
    Imgproc.medianBlur(mask, temp, 11);
    ... 

有一个模糊的矩形可见。我认为在 Imgproc.cvtColor() 的过程中,对原始图像的引用被一些新创建的替换。那么如何在不丢失参考的情况下转换矩阵中 ROI 的颜色呢?

我很感激任何帮助,谢谢!

PS:我想添加一些示例图像,但我的声誉不够高。对此我深表歉意,希望即使没有样品,您也能想象我的问题。

4

1 回答 1

1

您不能有图像,即1 部分通道,否则为 4 通道。

模糊示例运行良好,因为它没有改变通道数。

在复制之前,您必须再次将灰色(子)img 转换为 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);
于 2013-10-18T10:45:11.043 回答