【问题标题】:How to replace a rectangular region of Mat image如何替换 Mat 图像的矩形区域
【发布时间】:2014-07-30 09:33:32
【问题描述】:

我正在使用 opencv 图像处理库。我只想用另一个小图像替换原始 Mat 图像的矩形区域(小于原始图像)。我找不到这样做的方向

谁能帮帮我。提前致谢

【问题讨论】:

    标签: java opencv image-processing


    【解决方案1】:

    这是一种方法,而不是声称它是最好的方法。

    Mat m = ... // your smaller mat
    Mat submat= matOrig.submat(new Rect(x,y, m.cols(), m.rows()) );
    m.copyTo(submat);
    

    假设 m 没有超出 matOrig 的范围,这应该可以工作。当你得到一个 submat 时,它仍然链接到它的源 Mat。

    【讨论】:

    • 这是否会自动更新原始图像 :( 我试过了,但原始图像不会有任何变化,它只会更新我们从原始图像中提取的子图 .. 无论如何感谢您的帮助跨度>
    • 应该更新原版。你确定你不是先复制 submat 然后再复制到副本吗?
    • 我刚刚用Java写了一个小方法来更新图像的一部分。是因为Java吗?这是我的方法public void ChangeImage(Mat src, Mat small, Rect roi){ Mat subView =src.submat(roi); small.copyTo(subView); Highgui.imwrite("combined-image.png", src); }
    • 您的代码适用于我在 OpenCV 2.4.9 上。您确定为 Rect roi 设置了正确的值吗?以下是我在测试中创建 roi 的方式: Rect rect = new Rect(20, 20, small.cols(), small.rows());不确定你做了多少 Java,但我还建议使用 Java 约定并用小写命名你的方法:changeImage(...)
    • 对不起,我做了一些错误的编辑并将其回滚,我错过了这是 Java,它没有运算符重载:)
    【解决方案2】:

    这是我的代码:

    Mat m = new Mat(originalImg,new Rect(x,y,w, h));
    double[] size = {w, h};
    Imgproc.resize(logo,logo,new Size(size));// make sure your logo is the same size with your roi
    Imgproc.cvtColor(logo, logo, Imgproc.COLOR_RGBA2RGB);//make sure your logo has the same channel with your dst img
    congrats.copyTo(m);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      • 2018-10-30
      • 2020-12-01
      • 2017-11-10
      • 1970-01-01
      相关资源
      最近更新 更多