我有一个项目,我希望使用带有C ++的opencv将网络摄像头中的流式视频逐帧保存到avi文件中。我知道该怎么做。
我的问题是只有在帧中有变化时才将流式视频保存到文件中。
我想将当前帧与前一帧(来自网络摄像头的流视频)进行比较,如果有任何更改,请将帧保存到.avi文件中。
基本上我需要帮助opencv中的一个函数,它可以提供一种开始和停止将视频录制到文件的方法。
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
using namespace std;
using namespace cv;
int main( ) {
CvCapture* capture;
Mat A,B,C;
capture = cvCreateCameraCapture(0);
assert( capture != NULL );
IplImage* bgr_frame = cvQueryFrame( capture );
CvSize size = cvSize(
(int)cvGetCaptureProperty( capture,
CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty( capture,
CV_CAP_PROP_FRAME_HEIGHT)
);
cvNamedWindow( "Webcam", CV_WINDOW_AUTOSIZE );
CvVideoWriter *writer = cvCreateVideoWriter("I:/vidtry.AVI",CV_FOURCC('D','I','V','X'),15,size);
int x=1;
do
{
if(x==1)
{
A=Mat(bgr_frame);
x=0;
}
B=Mat(bgr_frame);
compare(A,B,C,CMP_EQ);
int flag=0;
for(int y = 0; y < C.rows; y++)
{
for(int x = 0; x < C.cols; x++)
{
if(C.at<unsigned char>(y, x)==255)
continue;
else
flag=1;
}
}
if(flag==0)
cvWriteFrame(writer, bgr_frame );
cvShowImage( "Webcam", bgr_frame );
char c = cvWaitKey( 33 );
if( c == 27 ) break;
A=bgr_frame;
}
while( (bgr_frame = cvQueryFrame( capture )) != NULL ) ;
cvReleaseVideoWriter( &writer );
cvReleaseCapture( &capture );
cvDestroyWindow( "Webcam" );
return( 0 );
}