Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用opencv在视频上覆盖图像_C++_Opencv_Image Processing - Fatal编程技术网

C++ 使用opencv在视频上覆盖图像

C++ 使用opencv在视频上覆盖图像,c++,opencv,image-processing,C++,Opencv,Image Processing,我使用这个函数使用OpenCV放置一个覆盖图像 void OverlayImage(IplImage* src, IplImage* overlay, CvPoint location, CvScalar S, CvScalar D) { for (int i = location.y; i < (location.y + overlay->height); i++) { for (int j = location.x; j < (location.x + overla

我使用这个函数使用OpenCV放置一个覆盖图像

void OverlayImage(IplImage* src, IplImage* overlay, CvPoint location, CvScalar S, CvScalar D) {
for (int i = location.y; i < (location.y + overlay->height); i++) {
    for (int j = location.x; j < (location.x + overlay->width); j++) {
        CvScalar source = cvGet2D(src, i, j);
        CvScalar over   = cvGet2D(overlay, i-location.y, j-location.x);
        CvScalar merged;

        for(int i = 0; i < 4; i++)
            merged.val[i] = (S.val[i] * source.val[i] + D.val[i] * over.val[i]);

        cvSet2D(src, i + location.y, j + location.x, merged);
    }
}
}
用于隐藏覆盖图像,如

展示

我使用这些函数的方式是:

if (frame_number < 400)
    OverlayImage(temp, tempad, cvPoint(10, 10), cvScalar(1,1,1,1), cvScalar(0,0,0,0));
else 
    OverlayImage(temp, tempad, cvPoint(10, 10), cvScalar(0,0,0,0), cvScalar(1,1,1,1));
if(帧号<400)
叠加图像(温度、温度、cvPoint(10,10)、cvScalar(1,1,1,1)、cvScalar(0,0,0,0));
其他的
叠加图像(温度、温度、cvPoint(10,10)、cvScalar(0,0,0,0)、cvScalar(1,1,1,1));
但是第一幅图像有一些扭曲的区域,我希望在400帧的视频后,使该图像消失。我怎样才能把那个区域弄清楚


请帮忙

好的,你可以在没有覆盖的情况下复制图像,然后当你不想显示覆盖图像时,你可以显示副本

你说的隐藏覆盖图像是什么意思?不确定这是否是您想要的,但如果您想隐藏覆盖图像,只需不要调用
OverlayImage()
来绘制它。隐藏意味着我想从那里删除图像!但我必须从显示图像开始,在400帧之后,图像应该被删除,为此我有
if(),否则
只需制作一个没有覆盖的图像副本,然后当你不想显示叠加的图像时,再显示副本。如果这回答了你的问题,我很乐意写一个正式的答案。@karlphilip Yes。。。这确实帮助了我。请将此作为正式答复。
OverlayImage(temp, tempad, cvPoint(10, 10), cvScalar(1,1,1,1), cvScalar(0,0,0,0)); 
if (frame_number < 400)
    OverlayImage(temp, tempad, cvPoint(10, 10), cvScalar(1,1,1,1), cvScalar(0,0,0,0));
else 
    OverlayImage(temp, tempad, cvPoint(10, 10), cvScalar(0,0,0,0), cvScalar(1,1,1,1));