执行过程中会发生什么cvWaitKey()
?有哪些典型的用例?我在OpenCV参考中看到了它,但是文档的确切用途尚不清楚。
cvWaitKey()
现在已弃用C函数。waitKey()
是现代C ++的等价物。
执行过程中会发生什么cvWaitKey()
?有哪些典型的用例?我在OpenCV参考中看到了它,但是文档的确切用途尚不清楚。
cvWaitKey()
现在已弃用C函数。waitKey()
是现代C ++的等价物。
Answers:
cvWaitKey(x) / cv::waitKey(x)
做两件事:
cv::imshow()
。请注意,它不会在stdin上监听控制台输入。如果在此期间按下了某个键,它将返回该键的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); */
等待毫秒检查按键是否被按下,如果在此间隔中按下,则返回其ascii值,否则仍为-1