cly*_*tis 3 c++ opencv image-processing
我正在尝试使用在线教程学习OPENCV用于图像处理项目.
opencv文档说waitKey()返回一个int.这应该是按下的键的ASCII值.但大多数在线教程使用以下编译并运行良好的代码.
if ( (char)27==waitKey(1) ) break;
这表明waitKey返回一个char而不是int.有人可以解释一下吗?
cv::waitKey()
返回一个int
.原因char key = cv::waitKey(1)
是由于C++中的隐式转换.在这种情况下,类型int
for 的返回值cv::waitKey()
被隐式转换为char
然后分配给key
.请参阅此链接以供参考.以下陈述是等效的:
char key = (char) cv::waitKey(30); // explicit cast
char key = cv::waitKey(30); // implicit cast
Run Code Online (Sandbox Code Playgroud)
在这种情况下if ((char)27 == waitKey(1)) break;
,输出waitKey(1)
可能隐式转换为char
然后与esc
字符(ASCII码27)进行比较.我会用显式转换重写它以避免歧义.
if ( (char)27 == (char) waitKey(1) ) break;
Run Code Online (Sandbox Code Playgroud)
我在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
Run Code Online (Sandbox Code Playgroud)
以下也是可能的,但第一种方法更清洁:
int key = cv::waitKey(30) & 255; // key is an integer here
if (key == 27) break; // break when `esc' key is pressed
Run Code Online (Sandbox Code Playgroud)