の実行中に何が起こりcvWaitKey()
ますか?いくつかの典型的なユースケースは何ですか?私はOpenCVリファレンスでそれを見ましたが、ドキュメントはその正確な目的について明確ではありません。
cvWaitKey()
は非推奨のC関数になりました。waitKey()
最新のC ++と同等です。
の実行中に何が起こりcvWaitKey()
ますか?いくつかの典型的なユースケースは何ですか?私はOpenCVリファレンスでそれを見ましたが、ドキュメントはその正確な目的について明確ではありません。
cvWaitKey()
は非推奨のC関数になりました。waitKey()
最新のC ++と同等です。
回答:
cvWaitKey(x) / cv::waitKey(x)
2つのことをします:
cv::imshow()
。stdinでコンソール入力をリッスンしないことに注意してください。その間にキーが押された場合、キーのASCIIコードが返されます。それ以外の場合は、を返します-1
。(xがゼロの場合、キーが押されるのを無期限に待機します。)cv::namedWindow()
たり、で画像を表示したりするなど、ウィンドウイベントを処理しcv::imshow()
ます。opencvの初心者によくある間違いはcv::imshow()
、各描画をcv::waitKey(30)
。でフォローアップせずに、ビデオフレームをループで呼び出すことです。この場合、highguiにはからの描画要求を処理する時間が与えられないため、画面には何も表示されませんcv::imshow()
。
cvWaitKey(0)
ボタンを押すまでプログラムを停止します。
cvWaitKey(10)
プログラムを停止しませんが、ボタンを押すと、ウェイクアップしてプログラムを終了するように警告します。ループをcvWaitkey
停止しないため、ループに使用されます。
通常の使用
char k;
k=cvWaitKey(0);
if(k == 'ESC')
でk
あなたはキーが押されたかを見ることができます。
。の引数0
は次のように解釈されますinfinite
。highGUIウィンドウをドラッグするには、cv::waitKey()
関数を継続的に呼び出す必要があります。例:静止画像の場合:
cv::imshow("winname", img);
while(cv::waitKey(1) != 27); // 27 = ascii value of ESC
cvWaitKey( )
機能に問題があった可能性のある人への注意。それcvWaitKey(x)
がまったく待機していないことに気付いた場合は、実際にウィンドウが開いていることを確認してください(つまりcvNamedWindow(...)
)。関数呼び出しのcvNamedWindow(...)
前に宣言を入れてくださいcvWaitKey()
。
/* Assuming this is a while loop -> e.g. video stream where img is obtained from say web camera.*/
cvShowImage("Window",img);
/* A small interval of 10 milliseconds. This may be necessary to display the image correctly */
cvWaitKey(10);
/* to wait until user feeds keyboard input replace with cvWaitKey(0); */
cvWaitKey(milliseconds)
キーボードの次のキーストロークのパラメータとして提供されるミリ秒を待つだけです。
人間の目は1/10秒以内に動くものを見ることができないので、これを使用して同じ画像フレームを画面上にしばらく保持します。キーボードのキーを押すとすぐに次の操作が実行されます。
要するにcvWaitKey(milliseconds)
、キーが押されるか、millisecond
提供される時間のいずれかを待ちます。
キーが押されたかどうかを確認するためにミリ秒待機します。その間隔で押された場合はASCII値を返し、それ以外の場合は-1のままです。