将视频文件中的每一帧叠加到一张最终图像中

时间:2018-10-17 11:58:31

标签: c++ opencv

我创建了一个程序,该程序可以以灰度方式更改视频文件中每个像素的颜色。

现在,该视频的每一帧都应相互叠加,并保存为一个最终图像,在该图像中可以看到每个帧的过渡。有谁知道如何做到这一点? (与C ++和opencv一起使用。)

先谢谢您!

#include <stdio.h>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int, char**)

{
cv::VideoCapture cap("/MyVideo.avi");
cv::Mat frame;

if( !cap.isOpened() )
    throw "Error when reading Video.avi";

for( ; ; )
 {
    cap >> frame;
    if(frame.empty())
        break;

    for( int i = 0; i < frame.rows; i++ )
                      for( int j = 0; j < frame.cols; j++ )

                          {
                              float R = frame.at<Vec3b>(i,j)[0];
                              float G = frame.at<Vec3b>(i,j)[1];
                              float B = frame.at<Vec3b>(i,j)[2];
                              float Y = 0.299*R + 0.587*G + 0.114*B;


                              frame.at<Vec3b>(i,j)[0] = Y;
                              frame.at<Vec3b>(i,j)[1] = Y;
                              frame.at<Vec3b>(i,j)[2] = Y;

                          }

    imshow("MyVideo.avi", frame);
    if (cv::waitKey(1) >= 0)
    break;
 }
return 0;

}

0 个答案:

没有答案