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 に答える