OpenCV的cvWaitKey()函数是做什么的?
在执行cvWaitKey()
过程中会发生什么? 什么是典型的用例? 我在OpenCV参考中看到它,但是文档的确切目的不明确。
cvWaitKey(x) / cv::waitKey(x)
做两件事:
- 它等待x毫秒的OpenCV窗口上按键(即从
cv::imshow()
创build)。 请注意,它不会监听控制台input的标准input。 如果在此期间按下了某个键,它将返回该键的ASCII码。 否则,它返回-1
。 (如果x为零,则无限期地等待按键。) - 它处理任何窗口事件,如使用
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