使用 OpenCV 可以实现画中画吗?

1 opencv roi emgucv

我想在较大的图像上添加较小的图像(最终用于视频源上的画中画)。我可以通过迭代大图像中的相关数据属性并添加小图像中的像素来实现。但是有没有更简单、更整洁的方法呢?我正在使用 EMGU。

我的想法是在与小图像大小相同的大图像中定义一个 ROI。将大图像设置为小图像,然后简单地删除 ROI。即在伪代码中:

Large.ROI = rectangle defined by small image;

Large = Small;

Large.ROI = Rectangle.Empty;
Run Code Online (Sandbox Code Playgroud)

然而,这不起作用,大图像不会改变。任何建议将不胜感激。

大图:
大图

小图:
小图

想要的结果:
想要的结果

Blo*_*Axe 5

如果您使用 C++ API,那么下面的代码片段应该可以工作:

cv::Mat big;
cv::Mat small;

// Define roi area (it has small image dimensions). 
cv::Rect roi = cv::Rect(50,50, small.cols, small.rows);

// Take a sub-view of the large image
cv::Mat subView = big(roi); 

// Copy contents of the small image to large
small.copyTo(subView); 
Run Code Online (Sandbox Code Playgroud)

注意不要超出大图像的尺寸。