执行cvWaitKey()
期间会发生什么?什么是典型的用例?我在 OpenCV 引用中看到了它,但文档的确切用途并不清楚。
答案 0 :(得分:124)
cvWaitKey(x) / cv::waitKey(x)
做了两件事:
cv::imshow()
创建)等待 x 毫秒。请注意,它不会在stdin上侦听控制台输入。如果在此期间按下了某个键,它将返回该键的ASCII码。否则,它返回-1
。 (如果 x 为零,则无限期等待按键。)cv::namedWindow()
创建窗口,或使用cv::imshow()
显示图像。 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