opencvを用いて、USBカメラから、1秒間に30フレームの自動撮影を行おうとしています。
しかし、プログラム初心者な為うまくいきません。
以下にプログラムを示しますが、sとcキーを押しても何も反応がありません。
また、qキーを押すと終了しますが、printfも表示されません。
訂正箇所や新しい方法を教えていただきたいと考えています。
include部分は省略します。
動作環境は、
opencv2.4.9、vc++2010Expressを使用しています。
int main( int argc, char** argv )
{
int key; // キー入力用変数
int counter = 0;
CvCapture *capture; // キャプチャ用構造体
IplImage *frameImage; // キャプチャ画像用IplImage
char str[32];
char windowNameCapture[] = "Capture"; // ウィンドウネーム
DWORD dwCurrentTime = 0; // 追加
DWORD dwLastTime = ::timeGetTime(); // 追加
BOOL bCapture = FALSE; // 追加
// タイマ精度を1msにする ::timeBeginPeriod(1); // 追加 // カメラの初期化 if( ( capture = cvCreateCameraCapture(-1)) == NULL) { // カメラデバイスが検出できない場合 printf("カメラデバイスを検出できません\n"); return -1; } // ウィンドウ生成 cvNamedWindow( windowNameCapture, CV_WINDOW_AUTOSIZE ); // メインループ while ( 1 ) { // カメラから1フレームをframeImageに格納 frameImage = cvQueryFrame( capture ); printf("フレームの問い合わせ\n"); // 画像表示 cvShowImage( windowNameCapture, frameImage ); printf("フレームの描画中\n"); key = cvWaitKey(0); // 静止撮影ボタンが押された if(key =='c') { sprintf_s( str, "testview%04d.bmp", counter++ ); cvSaveImage( str, frameImage ); } // 録画ボタンが押された else if(key == 's') { // トグルする bCapture ^=TRUE; ::printf("%s\n", bCapture?"録画開始":"録画停止"); // キャプチャーの開始を命じられたので開始時刻を取得 if(bCapture) { dwCurrentTime = dwLastTime = ::timeGetTime(); } } // 'q'キーが入力されたらループを抜ける else if(key == 'q') { printf("終了します\n"); break; } //キャプチャーしていないので引き返す if(!bCapture) { continue; } // 最新時間を取得 dwCurrentTime = ::timeGetTime(); // 経過時間がレートに満たないので引き返す if(dwCurrentTime - dwLastTime <= 30) { continue; } // 現在のタイムを最新のタイムにする dwLastTime = dwCurrentTime; // 保存 sprintf_s( str, "testsview%04d.bmp", counter++ ); cvSaveImage( str, frameImage ); printf("%s\n", str); } // キャプチャ解放 cvReleaseCapture( &capture ); // ウィンドウ破棄 cvDestroyWindow( windowNameCapture ); return 0;
}
回答2件
あなたの回答
tips
プレビュー