1

嘿,到目前为止,我管理 OpenCV 来播放 video.avi,但是我现在应该怎么做才能提取帧......?

以下是我到目前为止编写的让我的视频播放的代码:

#include<opencv\cv.h>
#include<opencv\highgui.h>
#include<opencv\ml.h>
#include<opencv\cxcore.h>



int main( int argc, char** argv ) {
cvNamedWindow( "DisplayVideo", CV_WINDOW_AUTOSIZE );
CvCapture* capture = cvCreateFileCapture( argv[1] );
IplImage* frame;
while(1) {
frame = cvQueryFrame( capture );
if( !frame ) break;
cvShowImage( "DisplayVideo", frame );
char c = cvWaitKey(33);
if( c == 27 ) break;
}
cvReleaseCapture( &capture );
cvDestroyWindow("DisplayVideo" );
}
4

1 回答 1

0

frame 您要提取的帧。如果要将其转换为 cv::Mat,可以通过使用该 IplImage 创建一个垫子来实现:

Mat myImage(IplImage);

这里有一个很好的教程

但是,您正在以旧方式进行操作。最新版本的 OpenCV 具有最新的相机捕捉能力,你应该这样做:

#include "cv.h"
#include "highgui.h"

using namespace cv;

int main()
{
    VideoCapture cap(0); // open the default camera
    if(!cap.isOpened())  // check if we succeeded
        return -1;

    namedWindow("Output",1);

    while(true)
    {
        Mat frame;
        cap >> frame; // get a new frame from camera


        //Do your processing here
        ...

        //Show the image

        imshow("Output", frame);
        if(waitKey(30) >= 0) break;
    }

    // the camera will be deinitialized automatically in VideoCapture destructor
    return 0;
}
于 2013-01-18T17:07:37.080 回答