投降させていただきます。
VC++2008、windowsXPでOpenCVを使ってプログラムを作っています。
OpenCVのサンプルを使ってカメラを起動し、静止画をボタンを押すことで保存することはできるようになりました。
これをアレンジして、静止画をセルフタイマーで自動に保存するようなプログラムを作りたいと考えています。
//画像表示と保存
while ( 1 ) {
//カメラからの入力画像1フレームをframeImageに格納する
frameImage = cvQueryFrame( capture );
//画像を表示する
cvShowImage( windowNameCapture, frameImage );
//'q'キーが入力されたらループを抜ける
key = cvWaitKey( 1 );
if ( key == 'q' ) {
break;
}
// 'c'キーが入力されったら画像を保存する
else if(key=='c'){
sprintf(filename,"C:/Documents and Settings/ryoji/My Documents/My Pictures/frame%d.bmp",count);
cvSaveImage(filename,frameImage);
count++;
}
}
これでqキーを押せばループを抜け、cキーが押されたら保存できます。
このcキーを押すことで保存されるのを、5秒毎に保存するようなプログラムをつくりたいです。
5秒後、10秒後、15秒後・・・といった形です。
ご回答のほどよろしくお願い致します。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
すみません 少々勘違いをしていたようです
cvWaitKey(5000);
では 画像更新のループが止まってしまいますね ・・・
int bSelf = 0;
int nCnt = 0;
while ( 1 ) {
// カメラからの入力画像1フレームをframeImageに格納する
frameImage = cvQueryFrame( capture );
// 画像を表示する
cvShowImage( windowNameCapture, frameImage );
// 'q'キーが入力されたらループを抜ける
key = cvWaitKey( 1 );
if ( key == 'q' ) {
break;
}
// 'c'キーが入力されったら画像を保存する
else if(key=='c'){
// フラグ更新
bSelf = ( bSelf == 0 );
nCnt = 0;
}
if ( bSelf && key == 0 ) {
nCnt++;
if ( nCnt >= 5000 ) {
sprintf(filename,"C:/Documents and Settings/ryoji/My Documents/My Pictures/frame%d.bmp",count);
cvSaveImage(filename,frameImage);
count++;
// 次回のためにカウンタを初期化
nCnt = 0;
}
}
}
といった具合でどうでしょう
回答ありがとうございます。
また、返事が遅くなってしまい申し訳ありません(>o<)
画像はうまく表示させることができました。
ありがとうございます。
ただ、'c'キーを押しても保存がされなくなりました。
自分でもアレンジしながら頑張りますが、また投稿していただければうれしいです。
No.1
- 回答日時:
Windowsであれば Timerを使ってといった手法が一般的なように思います
OpenCVだけでやるなら
cvWaitKeyに5000 とか与えて5秒の待ちを行い
cvSaveImageなどで保存をするといった具合でしょう
int bSelf = 0;
while ( 1 ) {
// カメラからの入力画像1フレームをframeImageに格納する
frameImage = cvQueryFrame( capture );
// 画像を表示する
cvShowImage( windowNameCapture, frameImage );
// 'q'キーが入力されたらループを抜ける
key = cvWaitKey( 1 );
if ( key == 'q' ) {
break;
}
// 'c'キーが入力されったら画像を保存する
else if(key=='c'){
// フラグ更新
bSelf = ( bSelf == 0 );
}
if ( bSelf ) {
if ( cvWaitKey( 5000 ) == 0 ) {
sprintf(filename,"C:/Documents and Settings/ryoji/My Documents/My Pictures/frame%d.bmp",count);
cvSaveImage(filename,frameImage);
count++;
}
}
}
といった具合で …
回答ありがとうございます。
やってみたのですが、うまく保存できません。
具体的には、cキーを押すとそこから5秒ごとに保存しているように見えるのですが、1回押してから5秒間、カメラ画像が止まってしまい、5秒後に撮影されたと思われる画像に切り替わります。
しかし、どこにも撮影された写真がなく、保存自体うまくできませんでした。
それと、私の説明不足ですが、実行してからcキーを押さずに5秒後、10秒後、15秒後・・・・というようなプログラムを作りたいと考えています。
説明不足で申し訳ありません。
もう1回考えてみるので、もしお時間などありましたらまたの回答よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- フリーソフト 1秒毎にキーの←を押すソフト 1 2023/03/06 04:27
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- PHP php 確認表示画面で値をSESSIONから取り出す理由の解釈は正しいでしょうか? 1 2023/06/09 17:39
- 写真・ビデオ Snowの写真保存について 1 2023/04/06 07:29
- デスクトップパソコン Windows11でスクショする方法がわかりません。 調べましたが、どうもWindowsキーがあるキ 8 2022/06/05 05:37
- iPhone(アイフォーン) iphoneでネット画像を保存できなくなった 3 2022/06/05 15:58
- ノートパソコン PCのshift+右クリックについて 2 2022/08/22 08:52
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- Windows 10 BitLocker 回復キーの入力 1 2022/10/09 15:23
- PHP php 入力画面から確認表示画面へ情報の受け渡しについて。 1 2023/06/07 18:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
プログラミング初心者です。 Py...
-
java初心者です。入力されたの...
-
数字以外が入力されたらエラー...
-
if文の条件にscanf関数を使うと…?
-
C言語scanf_sで何故か2回入力に...
-
Linuxで入力待ちなしkeyread関...
-
実行結果の順番がおかしいんで...
-
Eclipseコンソール表示を、リセ...
-
VB カウントダウンタイマーの作...
-
正負を反転させて出力するプロ...
-
VB.NETで16進数+16進数や16進...
-
ワードで文字を入力する時の変...
-
2進数の1の数を数える問題
-
C言語でつるかめ算をするにはど...
-
Java 6人分の得点を入力し、平...
-
getchar()について 教えてくだ...
-
入力エラーの処理について。
-
enterでループ終了
-
scanf が無視されます
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
double型が正常に認識されてい...
-
プログラミング初心者です。 Py...
-
正負を反転させて出力するプロ...
-
Excel VBAで、Application.Inpu...
-
C言語について。
-
batプログラム上で文字列を入力...
-
*をユーザーが入力した数字の数...
-
cout関数を使っているのですが...
-
漢字のソートについて
-
数字以外が入力されたらエラー...
-
Userformの入力順序をタブオー...
-
ワードで文字を入力する時の変...
-
Linuxで入力待ちなしkeyread関...
-
java初心者です。入力されたの...
-
EDITコントロールで入力できる...
-
Eclipseコンソール表示を、リセ...
-
小数か整数かを判定する方法
-
C言語scanf_sで何故か2回入力に...
-
VB.NETで16進数+16進数や16進...
-
Linuxプログラミングで、キーボ...
おすすめ情報