-2

ここでやろうとしていることは、ビデオをロードして再生し、ビデオの再生中にフレームをキャプチャして、新しいウィンドウに出力することです。これは、以下のコードがatmを実行することです。

しかし、キャプチャしたフレームにブラーを追加し、しきい値の前後でエッジを滑らかにすることで、次のレベルに引き上げたいと思います。

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



int main( int argc, char** argv ) {
//Main Window
    cvNamedWindow( "DisplayVideo", CV_WINDOW_AUTOSIZE );
    CvCapture* capture = cvCreateFileCapture( argv[1] ); //Video captured and stored in CAPTURE
    IplImage* frame; //Image captured and stored in FRAME

int num=0;
char s [20];

while(1) {
    num++;
    frame = cvQueryFrame(capture);
        if( !frame ) break;
        cvShowImage( "DisplayVideo", frame );
        char c = cvWaitKey(33);
        if( c == 27 ) break;
        if (c == 'f')
            {
            sprintf(s,"frame%d.jpg",num);
            cvSaveImage(s,frame);
            cvNamedWindow("FrameWindow", 0);
            cvShowImage("FrameWindow",frame);
            }
        }



cvReleaseCapture( &capture );
cvDestroyWindow("DisplayVideo" );
}
4

1 に答える 1

1

関数 cvQueryFrame は、カメラまたはビデオ ファイルからフレームを取得し、解凍して返します。この関数は、cvGrabFrame と cvRetrieveFrame を 1 回の呼び出しで組み合わせたものです。返されたイメージは、ユーザーによってリリースまたは変更されるべきではありません。

したがって、最初にフレームをメモリ内の制御可能な場所にコピーします。

IplImage* img;
cvCopyImage(frame,img);

cvSmooth(img,img,...);
cvThreshold(img,img,...);

...
cvReleseImage(&img);

cvSmooth はぼかしです。スムージングとぼかしの違いがわかりません。実行できるその他の画像操作については、OpenCV C リファレンスを確認してください。

于 2013-01-18T19:38:29.233 に答える