0

我已经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 相同大小的掩码,除了 Rect r 部分之外全为零?

4

2 回答 2

0

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

Mat tmp;
Imgproc.cvtColor(sub, tmp, Imgproc.COLOR_RGBA2GRAY); //make it gray
Imgproc.cvtColor(tmp, sub, Imgproc.COLOR_GRAY2RGBA); //change to rgb
于 2012-06-06T15:43:38.037 回答
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 完成的操作)

于 2012-06-07T07:21:13.300 回答