2010-12-03 14 views

答えて

9

は、質問はより「送信-私を-codez」典型的なStackOverflowのより需要のように見えるOPは、詳細な情報を提供し、彼または彼女はいくつかの実際を入れていることを示していることにより、質問それに考えました。

私はちょうど "半分の答え"を与えます...とにかく、私はOpenCVのマシン学習モジュールと、ライブラリの残りの部分についてはほとんど認識していません。 ;-)

擬似コードはそのように見えるはずであり、実装では一般的に前述のOpenCVメソッドが必要です。

myCapt = cvCreateFileCapture("myInput.avi") // Assuming the feed is from a file. 

    while (there are frames and we still want them) 
     cvGrabFrame(myCapt) 
     myImg = cvRetrieveFrame(myCapt) 
     // alternatively to cvGrabFrame + cvRetrieveFrame, could use cvQueryFrame() 

     // save the file (or do something with it...) 
     cvSaveImage("some_file_name_with_seq_nr", myImage) 

    cvReleaseCapture(capture) 

としては、停止するとき考え出す個々のフレームのファイル名を生成し、当然のことながら、適切に変数を宣言し、間接wの適切なレベルを使用して。例えば(上記のニーズに多くの構文とロジックの仕事を示唆しました/すべてそれらのポインタ;-)。もちろん、Pythonインタフェースを使用すると、これのほうが簡単になります。

Reading and Writing Images and Video OpenCV documentation pageには、個々のメソッドに関する詳細情報があります。

11

私の驚いたことに、私はStackoverflowでこの質問に対する答えを見つけることができませんでした。

私は現在使用していますOpenCV 2.1。これは少し古いかもしれませんが、それは魅力のように動作します。プログラムは、UIに

#include <stdio.h> 
#include <stdlib.h> 
#include "cv.h" 
#include "highgui.h" 

int main(int argc, char** argv) 
{ 
    if (argc < 2) 
    { 
     printf("!!! Usage: ./program <filename>\n"); 
     return -1; 
    } 

    printf("* Filename: %s\n", argv[1]); 

    CvCapture *capture = cvCaptureFromAVI(argv[1]); 
    if(!capture) 
    { 
     printf("!!! cvCaptureFromAVI failed (file not found?)\n"); 
     return -1; 
    } 

    int fps = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS); 
    printf("* FPS: %d\n", fps); 

    IplImage* frame = NULL; 
    int frame_number = 0; 
    char key = 0; 

    while (key != 'q') 
    { 
     // get frame 
     frame = cvQueryFrame(capture);  
     if (!frame) 
     { 
      printf("!!! cvQueryFrame failed: no frame\n"); 
      break; 
     }  

     char filename[100]; 
     strcpy(filename, "frame_"); 

     char frame_id[30]; 
     itoa(frame_number, frame_id, 10); 
     strcat(filename, frame_id); 
     strcat(filename, ".jpg"); 

     printf("* Saving: %s\n", filename); 

     if (!cvSaveImage(filename, frame)) 
     { 
      printf("!!! cvSaveImage failed\n"); 
      break; 
     } 

     frame_number++; 

     // quit when user press 'q' 
     key = cvWaitKey(1000/fps); 
    } 

    // free resources 
    cvReleaseCapture(&capture); 

    return 0; 
} 
+0

のthnx *たくさんの入力ファイルを読み込み、* frame_xx.jpgという名前のカレントフォルダに画像のシーケンスを作成しますOpenCVの2.0.0は、その上にこのコードの動作は – meroz

+0

uがplzは私に言ったことができていますどのようにこのコードを書いてそれを実行するのですか – meroz

+0

@ mero0oそれはまったく異なる質問ですが、あなたが使っているプラ​​ットフォームによって異なります。私はこの質問がすでに解決されていると信じています。私の答えを受け入れることを忘れないでください。 – karlphillip

関連する問題