2011-10-18 8 views
2

OpenCVを使用して連続したフレームを1つのウィンドウに表示するソリューションを探しています。画像のシーケンス(001.jpg002.jpg003.jpgなど)がありますが、ビデオはありません。私はループ内でそれらを表示する必要があります。OpenCVで連続フレームを表示する方法

画像を表示するための標準的なコードは次のとおり

IplImage* src = cvLoadImage("001.jpg"); 
cvNamedWindow("My pic"); 
cvShowImage("My pic",src); 
cvWaitKey(); 
+0

を追加します。次に、for(i = 0; i <= n; i ++){if(i == n)i = 0; .........}あなたは、キー(cvWaitKey())を押すと言うまで、ループ内のすべてのトラフを渡すことができます。 – Adrian

答えて

1

ように、リンクは、一つの選択肢は、例えば、自動的に正しいファイル名を生成する機能を記述することで、示唆している:これは、次いで、画像の既知の数のループで使用することができる

void loadImage(IplImage *image, int number) 
{ 
    // Store path to directory 
    char filename[100]; 
    strcpy(filename, "/path/to/files"); 

    // Convert integer to char  
    char frameNo[10]; 
    sprintf(frame, "%03i", number); 

    // Combine to generate path 
    strcat(filename, frameNo); 
    strcat(filename, ".bmp"); 

    // Use path to load image 
    image = cvLoadImage(filename); 
} 

IplImage *im; 
for (int i = 0; i < nImages; ++i) 
{ 
    loadImage(im, i); 

    /* 
     Do stuff with im 
    */ 
} 

別のオプションは、boost directory iteratorを調査することです。

+0

ありがとうChrisそれは今働く:) – user1002079

0

はOpenCVののXML/YAML永続性メカニズムを使用してみてください。ロードするイメージパスのリストを作成し、それらのパスを読み込んでイメージをロードするループを使用します。ステレオキャリブレーションの例では、このようなリストが使用されています(OpenCVにdirectory with examplesがインストールされています)。

+0

こんにちは、 お返事ありがとうございますが、これは私が多くの写真を持っていない場合に実際に便利です。私の場合、私は1000枚以上の画像を処理する必要があります。 – user1002079

+1

大丈夫、いくつかの一般的な名前が付けられていて、自動的に書き留めやすいのですか?私は約600枚の写真のデータベースを持っているので、問題を理解しています。手動で書く必要はありません。これらのファイルの名前を生成するループを作成し、それらの名前をxmlファイルに書き込みます。 (符号なしj = 0; j <_gal [i] .photos.size(); ++ j){ fs << _ gal [i] .photos [j]; } fs << "]" << "}}"; _gal [int] .photos [int]は、画像ファイルへのパスを含む文字列を返します。 – morynicz

1

@クリスコードは動作しますが、私はあなたがそれらすべてをロードし、IplImage型の配列に格納することができますあまりにも多くの写真を持っていない場合でも、単純なルーチン

void loadImage() 
{ 
int nImages = 6; 
for (int i = 0; i < nImages; ++i) 
{ 
IplImage *image; 
char filename[100]; 
strcpy(filename, "images/"); 

char frameNo[10]; 
sprintf(frameNo, "%03i", i); 

strcat(filename, frameNo); 
strcat(filename, ".jpg"); 

image = cvLoadImage(filename); 
cvNamedWindow("pic"); 
cvShowImage("pic",image); 
cvWaitKey(1000); 
} 
}