I'm trying to convert a color in a ROI of an matrix with OpenCV Java with following Code
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;
}
But the result is the same as the given image. If I change the Imgproc.cvtColor() call with a Imgproc.medianBlur() effect for example:
...
Imgproc.medianBlur(mask, temp, 11);
...
There is a blurred rectangle visible. I think while the process of Imgproc.cvtColor() the references to the original image are replaced by some newly created. So how else can I convert the color of a ROI in a matrix without loosing the references?
I appreciate any help, thanks!
P.S: I wanted to add some sample images but my reputation is not high enough. I'm sorry for this and hope you can imagine my problem even without samples.
you can't have an image, that is part 1 channel, and 4 channel otherwise.
the blur example worked fine, because it did not change the number of channels.
you'll have to convert your gray (sub)img to rgba again, before copying
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With