逐帧删除对象(在ROI内部)然后在opencv c ++中组合回视频

时间:2014-08-14 15:14:32

标签: c++ opencv video

我有一个项目需要在视频中插入内容或从视频中删除项目(例如汽车)。我的概念如下:

  1. 逐帧阅读视频,
  2. 发现投资回报率想要做点什么, 例如,在我的代码中,我尝试将汽车(静态)裁剪掉,
  3. 删除投资回报率内的任何内容
  4. 使用(双线性插值?)
  5. 恢复背景
  6. 输出插值视频。
  7. 有人能告诉我示例代码或一些参考吗?

        #include <stdio.h>
        #include <stdlib.h>
        #include <math.h>
        #include <string.h>
        #include <cv.h>
        #include "opencv2/core/core.hpp"
        #include "opencv2/imgproc/imgproc.hpp"
        #include "opencv2/video/background_segm.hpp"
        #include "opencv2/highgui/highgui.hpp"
    
        using namespace cv;
        using namespace std;
    
        CvCapture* cap = NULL;
        Mat frame;
        Mat edges;
        BackgroundSubtractorMOG2 bg;
    
        int main (int argc, char *argv[]) {
    
            cap = cvCreateFileCapture("inputfilehere");
            if(!cap)
                return -1;
    
            bg.set("nmixtures", 6);
            bg.set("detectShadows",false);
    
            //namedWindow("edges",CV_WINDOW_FREERATIO);
            //namedWindow("result",CV_WINDOW_AUTOSIZE);
    
            while(1){
                frame = cvQueryFrame(cap);
                Mat img;
                img = frame;
                cvtColor(frame, edges, CV_BGR2GRAY);
                Mat roi = img(Rect(130,300,70,40)); // the car location from my video or whatever object
                GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
                Canny(edges, edges, 0, 30, 3);
                imshow("Input Video", frame);
                imshow("ROI",roi);
                printf("Value: %d\n", static_cast<int>(frame.at<uchar>(0,0)));
    
                //system("PAUSE");
    
                if(waitKey(30) >= 0) break;
            }
            return 0;
    }
    

1 个答案:

答案 0 :(得分:-1)

我做过这个话题。

我认为屏幕稳定。 我想你可以按照以下步骤操作:

  1. 创建背景。使用HSV色彩空间。
  2. 在“目标框架”(任何包含对象框架)和背景之间减去图像。
  3. 在第2步之后,您将获得不同的图像,并将通道H和V的阈值设置为二进制图像。
  4. 按轮廓区域大小消除噪音。
  5. 平滑二进制图像使用Gaussblur(可能是过滤器大小15 * 15)。你会得到一个更完整的物体形象。
  6. 将对象图像设为遮罩,可以删除对象并恢复使用背景图像。
  7. 祝你好运!