cvWaitKey()
の実行中はどうなりますか?いくつかの典型的なユースケースは何ですか? OpenCVリファレンスで見ましたが、ドキュメントはその正確な目的について明確ではありません。
cvWaitKey(x) / cv::waitKey(x)
は2つのことを行います:
cv::imshow()
から作成)をxミリ秒待機します。コンソール入力を標準入力でリッスンしないことに注意してください。その間にキーが押された場合、キーのASCIIコードを返します。それ以外の場合は、-1
を返します。 (xがゼロの場合、キーが押されるまで無期限に待機します。)cv::namedWindow()
を使用してウィンドウを作成したり、cv::imshow()
を使用して画像を表示したりするなど、ウィンドウイベントを処理します。Opencvの初心者にとってよくある間違いは、cv::imshow()
で各描画をフォローアップせずに、ビデオフレームのループでcv::waitKey(30)
を呼び出すことです。この場合、highguiにはcv::imshow()
からの描画要求を処理する時間が与えられないため、画面には何も表示されません。
単純に、cvWaitKey()
はXミリ秒だけスリープし、キーが押されるのを待ちます。
int cvWaitKey(int X);
キーが押されると、この関数はキーのASCIIコードを返します。または、その間にキーが押されなかった場合は-1を返します。
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
は単に遅延を提供します。例えば:
char c = cvWaitKey(33);
if( c == 27 ) break;
これは、ビデオがopenCVにロードされ、フレームが出力されるコードの一部でした。コード内の33
番号は、33ms
の後に新しいフレームが表示されることを意味します。したがって、画面に表示されている各フレーム間の33ms
の間隔または時間間隔でした。お役に立てれば。
cvWaitKey(milliseconds)
は、キーボードの次のキーストロークのパラメーターとして指定されたミリ秒だけ待機します。
人間の目は1/10秒未満で動いているものを見ることができないので、これを使用して画面上でしばらくの間同じ画像フレームを保持します。キーボードのキーが押されるとすぐに、次の操作が実行されます。
短いcvWaitKey(milliseconds)
キーが押されるか、millisecond
時間のいずれかが提供されるのを待ちます。