在执行cvWaitKey()
期间会发生什么?什么是典型的用例?我在OpenCV参考中看到它,但其文档的确切目的不明确。OpenCV的cvWaitKey()函数是做什么的?
回答
cvWaitKey(0)
停止您的程序,直到您按下按钮。
cvWaitKey(10)
不会停止您的程序,但会在您按下按钮时唤醒并提醒您结束程序。它用于循环,因为cvWaitkey
不停止循环。
正常使用
char k;
k=cvWaitKey(0);
if(k == 'ESC')
与k
你可以看到按下了哪个键。
还有一点更重要 - 它是openCV消息循环。除非您在我的循环 – 2011-03-07 15:05:38
-1中调用cvWaitKey()进行比较,否则不会在cvNamedWindow中看到任何新数据** char?= multichar **。这是错误的。使用可打印的字符(在这种情况下是不可能的,因为ESC是不可打印的字符,但在例如使用Q键的情况下,您可以执行?='q'比较)或选择其中一个数字表示。 ASCII支持多种数字系统:十六进制(0x1b),十进制(27)和八进制(033)。所有列出的代表ESC键。 – rbaleksandar 2015-08-14 12:46:35
/* 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); */
平原简单,被按下cvWaitKey()
休眠X毫秒,等待任何键。
int cvWaitKey(int X);
如果按下某个键,此函数将返回键的ASCII码。如果在此期间没有按键,则返回-1。
这并不是完整的故事。实际上,即使你不关心键盘输入,调用这个函数对于一些OpenCV应用程序来说也是必不可少的。这里有一些[更多信息](http://opencv.willowgarage.com/wiki/documentation/c/highgui/WaitKey)。 – 2013-01-27 23:15:59
cvWaitKey(x)/cv::waitKey(x)
做两两件事:
- 它等待X毫秒一个的OpenCV窗口上的键按压(即,从
cv::imshow()
创建)。请注意,它不会监听控制台输入的标准输入。如果在此期间按下了某个键,它将返回该键的ASCII码。否则,它将返回-1
。 (如果X是零,它无限期地等待键按下。) - 它处理任何窗口的事件,诸如与
cv::namedWindow()
创建窗口,或显示用cv::imshow()
图像。
opencv新手常见的错误是通过视频帧在循环中调用cv::imshow()
,而不跟随每个绘制与cv::waitKey(30)
。在这种情况下,屏幕上不会显示任何内容,因为highgui从来没有时间处理来自cv::imshow()
的绘制请求。
1+为一个简单和完整的答案。 – qwerty9967 2013-04-01 15:08:35
cvWaitKey
只是提供了一些延迟。例如:
char c = cvWaitKey(33);
if(c == 27) break;
这是我的代码,其中一个视频加载到openCV和输出的帧的代码。代码中的33
数字表示在33ms
之后,将显示一个新帧。因此,屏幕上显示的是每帧之间的暗号或时间间隔33ms
。 希望这有助于。
cvWaitKey(milliseconds)
只需等待毫秒提供作为键盘的下一个键击的参数。
人类的眼睛无法看到物体在小于1/10秒内移动,所以我们用它在屏幕上保留了相同的图像帧一段时间。一旦键盘按键被按下,下一个操作将被执行。
总之cvWaitKey(milliseconds)
等待按键或millisecond
提供的时间。
“人类的眼睛无法看到物体在1/10秒内移动,所以我们用它在屏幕上保持一段时间,只要键盘按键被按下,下一个操作就会执行”这个问题真的很重要吗? – quantum 2012-10-20 01:40:40
请注意任何可能与cvWaitKey()
函数有问题的人。如果您发现cvWaitKey(x)
没有在等待,请确保您确实有一个窗口打开(即cvNamedWindow(...)
)。在进行任何cvWaitKey()
函数调用之前,请先声明cvNamedWindow(...)
。
欢迎来到SO,它是发布信息的好地方,就像你一样。通常,当您发布答案时,它必须为问题带来新信息,因此它不会创建冗余帖子。这是你的文章的情况。如果您的评论较小,您可以稍后对该问题发表评论(当您获得更多的广告时)。如果你还没有阅读它,我建议你看看FAQ:http://stackoverflow.com/faq。问候 – ForceMagic 2012-10-11 06:02:21
。参数0
被解释为infinite
。为了拖动highGUI窗口,您需要不断调用cv::waitKey()
函数。例如,对于静态图像:
cv::imshow("winname", img);
while(cv::waitKey(1) != 27); // 27 = ascii value of ESC
等待毫秒检查键被按下,如果被按压在间隔返回字符的ASCII值,否则它仍然-1
- 1. OpenCV的cvAcc()是做什么的?
- 2. 那么函数SDL_FreeSurface是做什么的?
- 3. MATLAB的bitxor函数是做什么的?
- 4. 什么是VBScript函数做什么
- 5. peer_connection.onicecandidate()函数做什么?什么是ice_event?
- 6. OpenCV中的凸函数函数的输出向量是什么?
- 7. Win32_AllocatedResource函数是做什么的?
- 8. jQuery()函数是做什么的?
- 9. “耙测试:函数”是做什么的?
- 10. Wordpress“_e()”函数是做什么的?
- 11. 这里做的it()函数是什么?
- 12. php函数“超载”是做什么的?
- 13. 什么是参数的类型,这个函数做什么?
- 14. 这个函数做什么?什么是奇怪的语法?
- 15. OpenCV drawMatches什么也不做
- 16. opencv - resizeWindow什么都不做?
- 17. jQuery(函数)或$(函数)是做什么的?
- 18. 这是什么lambda函数做
- 19. 什么是showErros函数做jQuery验证
- 20. 什么是延迟()函数做
- 21. 为什么cvWaitKey(0)不起作用?
- 22. MySQL的Decimal函数的第一个参数是做什么的?
- 23. OpenCV的cvWriteFrame(..)什么都不做
- 24. 这个函数做什么?
- 25. Wince - CreateProcess函数做什么
- 26. OpenCL native_函数做什么?
- 27. uint8函数做什么?
- 28. 这个函数做什么?
- 29. PHP函数@ $ _做什么?
- 30. “排序”函数的“键”参数是做什么的?
什么别你是否了解它,或者你认为它有什么作用? OpenCV文档参考对我来说似乎非常清楚... – 2011-03-07 08:44:47
@ user588855对于我们所有人来说,重新审视您的问题并接受一些答案(包括这一点)是很重要的。 – karlphillip 2011-03-31 22:38:08
对于记录,'cvWaitKey()'现在是一个弃用的C函数。 'waitKey()'是现代C++的等价物。 – StockB 2015-01-24 19:31:39