web-dev-qa-db-ja.com

OpenCVのcvWaitKey()関数は何をしますか?

cvWaitKey()の実行中はどうなりますか?いくつかの典型的なユースケースは何ですか? OpenCVリファレンスで見ましたが、ドキュメントはその正確な目的について明確ではありません。

73
Simplicity

cvWaitKey(x) / cv::waitKey(x)は2つのことを行います:

  1. OpenCVウィンドウでのキーの押下(つまり、cv::imshow()から作成)をxミリ秒待機します。コンソール入力を標準入力でリッスンしないことに注意してください。その間にキーが押された場合、キーのASCIIコードを返します。それ以外の場合は、-1を返します。 (xがゼロの場合、キーが押されるまで無期限に待機します。)
  2. cv::namedWindow()を使用してウィンドウを作成したり、cv::imshow()を使用して画像を表示したりするなど、ウィンドウイベントを処理します。

Opencvの初心者にとってよくある間違いは、cv::imshow()で各描画をフォローアップせずに、ビデオフレームのループでcv::waitKey(30)を呼び出すことです。この場合、highguiにはcv::imshow()からの描画要求を処理する時間が与えられないため、画面には何も表示されません。

130
SuperElectric

単純に、cvWaitKey()Xミリ秒だけスリープし、キーが押されるのを待ちます。

int cvWaitKey(int X);

キーが押されると、この関数はキーのASCIIコードを返します。または、その間にキーが押されなかった場合は-1を返します。

18
karlphillip

cvWaitKey(0)は、ボタンを押すまでプログラムを停止します。

cvWaitKey(10)はプログラムを停止しませんが、ボタンを押すと、プログラムを終了するように起動して警告します。 cvWaitkeyはループを停止しないため、ループに使用されます。

通常の使用

char k;

k=cvWaitKey(0);

if(k == 'ESC')

kを使用すると、押されたキーを確認できます。

12

0の引数はinfiniteとして解釈されます

。 highGUIウィンドウをドラッグするには、cv::waitKey()関数を継続的に呼び出す必要があります。例:静止画像の場合:

cv::imshow("winname", img);

while(cv::waitKey(1) != 27); // 27 = ascii value of ESC

8
user1564486

cvWaitKey( )関数で問題が発生した可能性のある人への注意。 cvWaitKey(x)がまったく待機していないことがわかっている場合は、実際にウィンドウを開いていることを確認してください(つまり、cvNamedWindow(...))。 cvNamedWindow(...)関数呼び出しの前にcvWaitKey()宣言を配置します。

8
Andy
/* 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); */
5

cvWaitKeyは単に遅延を提供します。例えば:

char c = cvWaitKey(33);
if( c == 27 ) break;

これは、ビデオがopenCVにロードされ、フレームが出力されるコードの一部でした。コード内の33番号は、33msの後に新しいフレームが表示されることを意味します。したがって、画面に表示されている各フレーム間の33msの間隔または時間間隔でした。お役に立てれば。

4
sue-ling

cvWaitKey(milliseconds)は、キーボードの次のキーストロークのパラメーターとして指定されたミリ秒だけ待機します。

人間の目は1/10秒未満で動いているものを見ることができないので、これを使用して画面上でしばらくの間同じ画像フレームを保持します。キーボードのキーが押されるとすぐに、次の操作が実行されます。

短いcvWaitKey(milliseconds)キーが押されるか、millisecond時間のいずれかが提供されるのを待ちます。

1
Pravin Dahale