OpenCV的cvWaitKey()函数有什么作用?

时间:2011-03-07 08:41:27

标签: c++ c opencv

执行cvWaitKey()期间会发生什么?什么是典型的用例?我在 OpenCV 引用中看到了它,但文档的确切用途并不清楚。

9 个答案:

答案 0 :(得分:124)

cvWaitKey(x) / cv::waitKey(x)做了两件事:

  1. 在OpenCV窗口上按键(即从cv::imshow()创建)等待 x 毫秒。请注意,它不会在stdin上侦听控制台输入。如果在此期间按下了某个键,它将返回该键的ASCII码。否则,它返回-1。 (如果 x 为零,则无限期等待按键。)
  2. 它处理任何窗口事件,例如使用cv::namedWindow()创建窗口,或使用cv::imshow()显示图像。
  3. opencv新手的一个常见错误是通过视频帧循环调用cv::imshow(),而不用cv::waitKey(30)跟进每次抽奖。在这种情况下,屏幕上不显示任何内容,因为从未给予highgui处理来自cv::imshow()的绘制请求的时间。

答案 1 :(得分:18)

简单地说,cvWaitKey()睡眠 X 毫秒,等待按下任何键。

int cvWaitKey(int X);

如果按下某个键,则此函数返回密钥的ASCII代码。如果在此期间没有按任何键,则返回 -1

答案 2 :(得分:12)

cvWaitKey(0)会停止您的程序,直到您按下按钮。

cvWaitKey(10)不会停止您的程序,但会在按下按钮时唤醒并提醒您结束程序。它用于循环,因为cvWaitkey不会停止循环。

正常使用

char k;

k=cvWaitKey(0);

if(k == 'ESC')

使用k,您可以看到按下了哪个键。

答案 3 :(得分:8)

请注意可能遇到cvWaitKey( )功能问题的人。如果您发现cvWaitKey(x)没有等待,请确保您确实打开了一个窗口(即cvNamedWindow(...))。在任何cvNamedWindow(...)函数调用之前放置cvWaitKey()声明。

答案 4 :(得分:7)

0的参数被解释为infinite

。为了拖动highGUI窗口,您需要不断调用cv::waitKey()函数。例如,对于静态图像:

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

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

答案 5 :(得分:5)

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

答案 6 :(得分:4)

cvWaitKey只是提供了一些延迟。例如:

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

Tis是我的代码的一部分,其中视频被加载到openCV并输出帧。代码中的33数字表示在33ms之后,将显示新的帧。因此,在屏幕上显示的每个帧之间是33ms的dely或时间间隔。 希望这会有所帮助。

答案 7 :(得分:1)

cvWaitKey(milliseconds)只需等待作为键盘下一键击键参数提供的毫秒数。

人眼不能在不到1/10秒内看到移动的东西,所以我们用这个在屏幕上保持相同的图像帧一段时间。一旦按下键盘键,就会执行下一个操作。

简而言之cvWaitKey(milliseconds)等待按键或提供millisecond时间。

答案 8 :(得分:-1)

等待毫秒来检查按键是否被按下,如果在该间隔中按下则返回其ascii值,否则它仍为-1