opencv android java矩阵子矩阵(ROI感兴趣的区域)

时间:2012-06-06 15:37:12

标签: android opencv submatrix

mRgba Matrix and a Rect r(框架中已识别的内容)

我想要一个由Rect r.

定义的帧的这一部分的子矩阵

当我像这样使用它时:

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

如何将此更改的子矩阵复制回原始矩阵。 或者我怎样才能获得/创建一个与mRgba相同大小的Mask,除了Rect r部分以外都是零?

2 个答案:

答案 0 :(得分:0)

您的代码无法按预期工作,因为无法就地更改颜色数。您需要一个临时矩阵才能使其正常工作:

Mat tmp;
Imgproc.cvtColor(sub, tmp, Imgproc.COLOR_RGBA2GRAY); //make it gray
Imgproc.cvtColor(tmp, sub, Imgproc.COLOR_GRAY2RGBA); //change to rgb

答案 1 :(得分:0)

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));

好吧这似乎可以做到这一点:)它将更改后的子图片/矩阵复制回源的区域..(通常用setROI和copyto完成)