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

如何使用OpenCV Java转换矩阵中矩形(ROI)的颜色?,java,opencv,image-processing,roi,Java,Opencv,Image Processing,Roi,我正试图用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

我正试图用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的颜色呢

谢谢你的帮助,谢谢


附言:我想添加一些样本图片,但我的声誉不够高。我很抱歉,希望你能想象我的问题,即使没有样品

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

模糊示例效果很好,因为它没有更改通道数

在复制之前,您必须再次将灰色(sub)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);