- ベストアンサー
OpenCVによる時間差表示
- OpenCVを使用してカメラ画像に時間差で点を表示するプログラムを作成する方法を教えてください。
- 点を中心、右隅、左隅、上、下の位置に表示し、中心は0秒から5秒まで、右隅は5秒から10秒まで、左隅は10秒から15秒まで表示するようにしたいです。
- どのようにプログラムを作ればよいか分からないので、詳しい手順を教えていただけると助かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
表示した丸は消すのでしょうか? 消すなら元画像と、そのコピーを準備しましょう 実行環境がWindowsであるならば _ftimeで時刻を取得し cvWaitKeyで時間待ちをします int WaitTime( long nTime ) { // 待ち時間 nTimeは ms単位 struct _timeb buf1, buf2; long nn = nTime; int ch = 0; _ftime( &buf1 ); while ( nn >= 0 ) { ch = cvWaitKey( nn ); if ( ch == 27 ) { // ESCが押されたら終了 return 1; } _ftime( &buf2 ); // 残りの待ち時間を算出 nn = nTime - ( ( buf2.time - buf1.time ) * 1000 + ( buf2.millitm - buf1.Millitm ) ); } return 0; } といった具合の関数でどうでしょう # 開発環境や実行環境の情報も投稿しましょう # VC++6.0 Pro WinXPSP3 などと ・・・
その他の回答 (1)
- tholatin
- ベストアンサー率0% (0/1)
似たようなプログラムを書いたことがあります(VC++2005). カメラのフレームレートを利用して時間を計測していました.だいぶ稚拙な出来ですが・・・ 以下では,自分でフレームレートを調べて変数”fps”に指定しています. カメラのフレームレートは確かopenCVの関数で取得できたはずですが,私の使っていたwebカメラからは取得できませんでした. -------------------- int fps = 15; // カメラのフレームレート int c = 0; // ここでは15秒でループは閉じることにしています while( c < 15 * fps ){ if( c < 5 * fps ){ cvCircle( frameImage, cvPoint( 320, 250 ), 1, CV_RGB( 0, 255, 0 ), 5, 8, 0 ); } else if( c < 10 * fps && c >= 5 * fps ){ cvCircle( frameImage, cvPoint( 635, 250 ), 1, CV_RGB( 0, 255, 0 ), 5, 8, 0 ); } else{ cvCircle( frameImage, cvPoint( 5, 250 ), 1, CV_RGB( 0, 255, 0 ), 5, 8, 0 ); } c++; //その他,表示など(省略します) cvWaitkey( 10 ); } --------------------- 質問からは,表示した点をずっと表示させたままなのか,違うところに点を描いたら前の点は消すのか,どちらなのかよくわかりませんでした. 上記では,5秒たったら中心の点は消え,右隅だけに点が表示されます. ずっと表示させたいなら,if文の中にcvCircleを足せばいいと思います.
お礼
返事が遅くなって申し訳ありません。 回答のほうありがとうございます。 デバックしてみると、エラーはでないのですが、カメラからの出力がなく、映像が映し出されなくなってしまいました。 やはりカメラを認識できていないということなのでしょうか? 質問の内容がおおざっぱすぎて申し訳ありません。 中心の点を5秒間表示したら消し、右の表示を5秒間表示したら消し、と繰り返して行うようなものを作りたいと考えています。
補足
すいません、できました。 少し自分の入力ミスがありました。 本当にご協力ありがとうございました。
お礼
回答のほどありがとうございます。 また返事が遅くなってしまい申し訳ありませんでした。 がんばってやってみたいと思います。 ありがとうございました。