加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – OPENCV waitKey()方法返回类型

发布时间:2020-12-16 09:57:17 所属栏目:百科 来源:网络整理
导读:我正在尝试使用在线教程学习OPENCV用于图像处理项目. opencv文档说waitKey()返回一个int.这应该是按下的键的ASCII值.但大多数在线教程使用以下编译并运行良好的代码. if((char)27 == waitKey(1))break; 这表明waitKey返回一个char而不是int. 有人可以解释一
我正在尝试使用在线教程学习OPENCV用于图像处理项目.

opencv文档说waitKey()返回一个int.这应该是按下的键的ASCII值.但大多数在线教程使用以下编译并运行良好的代码.

if((char)27 == waitKey(1))break;

这表明waitKey返回一个char而不是int.
有人可以解释一下吗?

解决方法

cv :: waitKey()返回一个int. char key = cv :: waitKey(1)的原因是由于C中的隐式转换.在这种情况下,cv :: waitKey()的int类型的返回值被隐式转换为char,然后分配给key.请参阅 this link以供参考.以下陈述是等效的:

char key = (char) cv::waitKey(30); // explicit cast
char key = cv::waitKey(30);        // implicit cast

在if((char)27 == waitKey(1))break;的情况下,waitKey(1)的输出可能隐式转换为char,然后与esc字符(ASCII代码27)进行比较.我会用显式转换重写它以避免歧义.

if ( (char)27 == (char) waitKey(1) ) break;

我在OpenCV示例cpp文件中看到它的常见方式:

char key = (char) cv::waitKey(30);   // explicit cast
if (key == 27) break;                // break if `esc' key was pressed. 
if (key == ' ') do_something();      // do_something() when space key is pressed

以下也是可能的,但第一种方法更清洁:

int key = cv::waitKey(30) & 255; // key is an integer here
if (key == 27) break;            // break when `esc' key is pressed

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读