2012-02-12 16 views
5
#include "cv.h" 
#include "highgui.h" 
int main(int argc, char** argv) 
{ 
CvCapture* capture=0; 
IplImage* frame=0; 

capture = cvCaptureFromAVI("C:\\boy walking back.avi"); // read AVI video 
if(!capture) 
    throw "Error when reading steam_avi"; 

cvNamedWindow("w", 1); 

for(; ;) 
{ 
/* int cvGrabFrame (CvCapture* capture); 
    IplImage* cvRetrieveFrame (CvCapture* capture)*/ 
    frame = cvQueryFrame(capture); 
if(!frame) 
     break; 
    cvShowImage("w", frame); 

} 
cvWaitKey(0); // key press to close window 
cvDestroyWindow("w"); 
cvReleaseImage(&frame); 
} 

私はVS2008でopenCVを使用しています。私はビデオファイルを読み込み、CV_CAP_PROP_FRAME_COUNTを使用して、4秒間のビデオクリップに対して約130のフレーム数を取得しました。私は歩行の動作認識をしているので、5つのフレームの間に5フレームおきに取得する必要があるため、身体の動きにはほとんど変化がありません。これまでビデオクリップの1つのフレームを取得できるプログラムがあります。しかし、私は別のフレームを取得することができませんまた、私は他のすべての5つのフレームを取得する方法についてはよく分かりません。上記はビデオの1フレームを取得するためのコードです。OpenCVを使用して.aviビデオからフレームを取得

答えて

6

4つのフレームをスキップしてから、5番目のフレームを保持できるはずです。

IplImage* skipNFrames(CvCapture* capture, int n) 
{ 
    for(int i = 0; i < n; ++i) 
    { 
     if(cvQueryFrame(capture) == NULL) 
     { 
      return NULL; 
     } 
    } 

    return cvQueryFrame(capture); 
} 


int main(int argc, char* argv[]) 
{ 
    CvCapture* capture = cvCaptureFromFile("../opencv-root/samples/c/tree.avi"); 

    IplImage* frame = NULL; 
    do 
    { 
     frame = skipNFrames(capture, 4); 
     cvNamedWindow("frame", CV_WINDOW_AUTOSIZE); 
     cvShowImage("frame", frame); 
     cvWaitKey(100); 
    } while(frame != NULL); 

    cvReleaseCapture(&capture); 
    cvDestroyWindow("frame"); 
    cvReleaseImage(&frame); 

    return 0; 
} 

希望に役立ちます:)あなたの助けのための

+0

感謝を:以下は、私はこれを実証するために書いた小さな例です。私が馬鹿に見えたら私を許してください。しかし、私はOpenCVをかなり新しくしています。あなたのコードが実行されたとき、ビデオクリップはより速いスピードで実行されました。もちろん、100のディレイの時間を調整することによって変更することができます。しかし、ビデオの5分の1フレームを簡単に取得する方法はありますか?たとえば、コードの出力は、動きの中でその人を示すフレームになります。これまでのところあなたのご支援に感謝します。 –

+1

Xを枠に入れることができるかどうか質問しています。ここでXは1から5までの任意の枠ですか? – mevatron

+0

私は5フレームに非常に1を抽出することができました。助けていただきありがとうございます:)私は今、マスク画像を作成しようとしています。または、ビデオのフレームの画像をコピーしました。 2つのイメージをアップロードして、達成しようとしていることを示していますが、まだ10の評判はありません。/使用するopenCVの機能について、私に助言することはできますか? –