我创建了一个程序,该程序可以以灰度方式更改视频文件中每个像素的颜色。
现在,该视频的每一帧都应相互叠加,并保存为一个最终图像,在该图像中可以看到每个帧的过渡。有谁知道如何做到这一点? (与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;
}