【问题标题】:opencv android java matrix submatrix (ROI Region of Interest)opencv android java matrix submatrix (ROI Region of Interest)
【发布时间】:2012-06-06 15:37:11
【问题描述】:

我有 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 部分之外全为零?

【问题讨论】:

    标签: android opencv submatrix


    【解决方案1】:

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

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

    【讨论】:

    • 嗨..谢谢你的回答..实际上这似乎没有问题和/或没有任何改变。是使用 for 循环逐步制作掩码的唯一方法吗?
    • sub.copyTo(mRgba.submat(r));好的,这似乎可以解决问题:)它将更改的子图片/矩阵复制回原始图像的区域。
    【解决方案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));
    

    好的,这似乎可以解决问题 :) 它会将更改后的子图片/矩阵复制回源区域。(通常使用 setROI 和 copyto 完成的操作)

    【讨论】:

    • 另一件要记住的事情,如果你想从不同的来源复制两个子垫abAB,重要的是AB有相同类型(例如CV_32F
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2016-04-25
    相关资源
    最近更新 更多