执行过程中会发生什么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