如何使用opencv从网络摄像头开始和停止录制/捕获视频文件?

时间:2015-05-31 05:57:38

标签: c++ opencv video

我有一个项目,我希望使用带有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 );
}

0 个答案:

没有答案