opencv android java matrix submatrix (ROI Region of Interest)

岁酱吖の 提交于 2019-12-12 04:57:58

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!