问题
I've mRgba Matrix and a Rect r
(something recognized in the frame)
I want a sub-matrix of this part of the frame which is defined by the Rect r.
when I use it like this:
sub = mRgba.submat(r);
I get the right sub-matrix, but I've a problem with the next steps, I want to change this part of the frame and then copy it back to the original.
For example:
Imgproc.cvtColor(sub, sub, Imgproc.COLOR_RGBA2GRAY, 1); //make it gray
Imgproc.cvtColor(sub, sub, Imgproc.COLOR_GRAY2RGBA, 4); //change to rgb
How can I copy this changed sub-matrix back to the original. or how can I get/create a Mask same size as mRgba with all zeros except the Rect r part?
回答1:
Your code does not work as you expected because it is impossible to change number of colors in-place. You need a temporary matrix to make it work:
Mat tmp;
Imgproc.cvtColor(sub, tmp, Imgproc.COLOR_RGBA2GRAY); //make it gray
Imgproc.cvtColor(tmp, sub, Imgproc.COLOR_GRAY2RGBA); //change to rgb
回答2:
sub = mRgba.submat(r);
Imgproc.cvtColor(sub, sub, Imgproc.COLOR_RGBA2GRAY, 1); //make it gray
Imgproc.cvtColor(sub, sub, Imgproc.COLOR_GRAY2RGBA, 4); //change to rgb
sub.copyTo(mRgba.submat(r));
ok this seems to do the trick :) it copies the changed subpicture/matrix back in the region of the source.. (what is normally done with setROI and copyto)
来源:https://stackoverflow.com/questions/10917480/opencv-android-java-matrix-submatrix-roi-region-of-interest