Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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++_Visual Studio_Opencv_Image Processing_Video Processing - Fatal编程技术网

C++ 将视频序列与OpenCV中的另一个视频交互播放

C++ 将视频序列与OpenCV中的另一个视频交互播放,c++,visual-studio,opencv,image-processing,video-processing,C++,Visual Studio,Opencv,Image Processing,Video Processing,如何使用OpenCV将一个小视频序列添加到另一个视频 更详细地说,假设我有一个视频播放,它是交互式的,比如说用户观看视频时会做一些手势,在现有视频的底部或角落播放一个短序列。对于每一帧,您需要复制一个图像,其中包含视频帧内所需的内容。这些步骤是: 定义覆盖框架的大小 定义显示覆盖框架的位置 每帧 用一些内容填充覆盖图框架 在原始帧中定义的位置复制覆盖帧 这个小片段将在摄影机提要的右下角显示一个随机噪波覆盖窗口: #include <opencv2/opencv.hpp> using

如何使用OpenCV将一个小视频序列添加到另一个视频


更详细地说,假设我有一个视频播放,它是交互式的,比如说用户观看视频时会做一些手势,在现有视频的底部或角落播放一个短序列。

对于每一帧,您需要复制一个图像,其中包含视频帧内所需的内容。这些步骤是:

  • 定义覆盖框架的大小
  • 定义显示覆盖框架的位置
  • 每帧

  • 用一些内容填充覆盖图框架
  • 在原始帧中定义的位置复制覆盖帧
  • 这个小片段将在摄影机提要的右下角显示一个随机噪波覆盖窗口:

    #include <opencv2/opencv.hpp>
    using namespace cv;
    using namespace std;
    
    
    int main()
    {
        // Video capture frame
        Mat3b frame;
        // Overlay frame
        Mat3b overlayFrame(100, 200);
    
        // Init VideoCapture
        VideoCapture cap(0);
    
        // check if we succeeded
        if (!cap.isOpened()) {
            cerr << "ERROR! Unable to open camera\n";
            return -1;
        }
    
        // Get video size
        int w = cap.get(CAP_PROP_FRAME_WIDTH);
        int h = cap.get(CAP_PROP_FRAME_HEIGHT);
    
        // Define where the show the overlay frame 
        Rect roi(w - overlayFrame.cols, h - overlayFrame.rows, overlayFrame.cols, overlayFrame.rows);
    
        //--- GRAB AND WRITE LOOP
        cout << "Start grabbing" << endl
            << "Press any key to terminate" << endl;
        for (;;)
        {
            // wait for a new frame from camera and store it into 'frame'
            cap.read(frame);
    
            // Fill overlayFrame with something meaningful (here random noise)
            randu(overlayFrame, Scalar(0, 0, 0), Scalar(256, 256, 256));
    
            // Overlay
            overlayFrame.copyTo(frame(roi));
    
            // check if we succeeded
            if (frame.empty()) {
                cerr << "ERROR! blank frame grabbed\n";
                break;
            }
            // show live and wait for a key with timeout long enough to show images
            imshow("Live", frame);
            if (waitKey(5) >= 0)
                break;
        }
        // the camera will be deinitialized automatically in VideoCapture destructor
        return 0;
    }
    
    #包括
    使用名称空间cv;
    使用名称空间std;
    int main()
    {
    //视频捕获帧
    Mat3b框架;
    //覆盖框架
    Mat3b覆盖框架(100200);
    //初始化视频捕获
    视频捕获上限(0);
    //检查我们是否成功
    如果(!cap.isOpened()){
    瑟尔