OpenCV如何限制cv::waitKey只等待一个特定按键?

6

有没有一种方法可以限制cv::WaitKey()只等待一个按键? 例如esc按钮? 我希望能够按下除此目标键以外的任何键,窗口仍然保持打开状态。


请查看这个OpenCV示例:使用键盘添加交互 - flowfree
@flowtree 还有没有其他方法可以找到那个例子?我对它很感兴趣,但链接已经失效了。 - penelope
同一教程的链接,只是来自Web存档;因此在任何时候都不应该出现错误:http://web.archive.org/web/20130619174223/http://bsd-noobz.com/opencv-guide/45-1-using-keyboard - penelope
2个回答

8
我刚刚偶然发现了这个问题,我相信会有更多的人寻找同样的答案。实际上,有一种非常简单的方法来做到这一点。cv::waitKey()返回一个整数,该整数对应于按下键的键代码。通过将waitKey调用放入一个循环中,将返回值与您要查找的键码进行比较,您可以等待特定的键。
然而,这里有一个非常大的陷阱:在某些平台上,返回值中设置了最高有效位,这意味着如果您只将它们与普通键码进行比较,则循环永远不会停止。通过使用与除去最高有效位以外的所有位的按位AND,您可以避免这种情况,如下所示:
while((cv::waitKey() & 0xEFFFFF) != 27); //27 is the keycode for ESC

-2
你可以这样做:
// Loop until escape is pressed
while (cvWaitKey(1) != '\33') {

}

嘿,感谢回复。您介意详细解释一下您的答案吗?在那个if语句中我应该调用什么?我的目标是循环遍历一个目录并显示每个图像,对每个图像进行一些操作,然后按Esc键移动到下一个图像。 - Michael Rickert
哦,我的天,那是一个糟糕的答案。我应该为自己感到羞愧。如果 OP 拒绝了这个答案,我会删除它。 - Tony The Lion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接