ページ 11

画像の連続撮影について

Posted: 2012年9月20日(木) 20:34
by ホヅミ
opencvを使って画像の連続撮影をしています。
しかし、撮影を行った際に1枚ずつ保存し続けると動作が重くなり取りこぼしが起きてしまいます。
取りこぼしが起きないようにするためにはどうしたらよいでしょうか?

環境
Windows7
opencv 2.4
Visual Studio 2010

コード:

int main(void){
	CvCapture *capture = 0;
	IplImage *frame=0;
	char name[100];
	int i;
	int c;
	capture = cvCreateCameraCapture (0);
	cvNamedWindow ("Capture", CV_WINDOW_AUTOSIZE);
	while(1){
		frame= cvQueryFrame (capture);
	    cvShowImage ("Capture", frame);
	    sprintf(name,"DATA\\%05d.bmp",i);
		cvSaveImage(name,frame);
		c = cvWaitKey(10);
		if (c == '\x1b')
			break;
	}
	cvReleaseCapture (&capture);
	cvDestroyWindow ("Capture");
	return 0;
}


Re: 画像の連続殺絵について

Posted: 2012年9月20日(木) 21:38
by みけCAT
とりあえず、iを初期化も更新もしていないのは大丈夫ですか?

Re: 画像の連続殺絵について

Posted: 2012年9月20日(木) 21:45
by ホヅミ
書き込んだ直後に気が付いて治しましたが変わりませんでした。

Re: 画像の連続撮影について

Posted: 2012年9月21日(金) 03:45
by かずま
c = cvWaitKey(10); の 10 を 100 にしてみたらどうなりますか?

Re: 画像の連続撮影について

Posted: 2012年9月21日(金) 08:50
by ホヅミ
ご意見ありがとうございます。
フレーム数はこれ以上区切りたくないのでウェイトは2~15までにしたいです。
撮る枚数としては30秒間に800枚を目安にしたいです。
800枚分のバッファを用意してメモリ上にキャッシュとして残し最後に画像として出力という形を今は取っておりますが
逐次保存といった仕様にしたいです。

よろしくお願いします。

Re: 画像の連続撮影について

Posted: 2012年9月21日(金) 10:32
by へにっくす
ホヅミ さんが書きました:ご意見ありがとうございます。
フレーム数はこれ以上区切りたくないのでウェイトは2~15までにしたいです。
なにか勘違いしていないか?
100にするとどういうことが起きるかを知りたいのに、この返答はないと思いますが。

ちなみに30秒で800枚って、1枚につき0.0375秒。1秒につき26.7枚
コードをみる限りでは、普通に1枚ずつとって1枚ずつファイルに保存という手順なので、
いくら早いパソコンだろうが無理なんでは?
保存する先をRAM DISKにするとかしか思いつかないな(それでも26枚も保存できないかもね)。

デジカメで1秒につき60枚なんてのもありますが、それはハードが対応しているからそのスペックなのであって、
カメラ用にカスタマイズもされていないパソコンにその要求は無理と分かりそうなもんですけどね。
連写に強い、スポーツ向けコンパクトデジカメを選ぶ

Re: 画像の連続撮影について

Posted: 2012年9月21日(金) 12:25
by ホヅミ
諦めて並列処理で行きます。
自己解決しました。
ありがとうございました。