OpenCV的cvWaitKey()函数是做什么的?

在执行cvWaitKey()过程中会发生什么? 什么是典型的用例? 我在OpenCV参考中看到它,但是文档的确切目的不明确。

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

  1. 它等待x毫秒的OpenCV窗口上按键(即从cv::imshow()创build)。 请注意,它不会监听控制台input的标准input。 如果在此期间按下了某个键,它将返回该键的ASCII码。 否则,它返回-1 。 (如果x为零,则无限期地等待按键。)
  2. 它处理任何窗口事件,如使用cv::namedWindow()创build窗口,或使用cv::imshow()显示图像。

opencv新手常犯的一个错误是在video帧的循环中调用cv::imshow() ,而不用每个循环都用cv::waitKey(30) 。 在这种情况下,屏幕上不会显示任何内容,因为highgui从来没有时间处理来自cv::imshow()的绘制请求。

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

 int cvWaitKey(int X); 

如果一个键被按下,这个函数返回键的ASCII码。 如果在此期间没有按键,则返回-1

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

cvWaitKey(10)不会停止你的程序,但当你按下一个button时唤醒并提醒你结束你的程序。 它用于循环,因为cvWaitkey不会停止循环。

正常使用

 char k; k=cvWaitKey(0); if(k == 'ESC') 

k你可以看到什么键被按下。

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

0参数被解释为infinite

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

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

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

 /* Assuming this is a while loop -> eg 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; 

这是我的代码,其中一个video加载到openCV和输出的帧。 代码中的数字33意味着在33ms后,会显示一个新的帧。 因此,屏幕上显示的是每帧之间33毫秒的时间间隔。 希望这可以帮助。

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

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

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

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