Opencv cv::waitKey() return value
Opencv cv::waitKey() return value
我正在调试一些在Ubuntu 14上使用OpenCV的C++代码,众所周知,这些代码可以在Ubuntu 12上运行,并且可能适用于其他OpenCV库构建。
以前是什么
int key_pressed = waitKey(0);
cout << "key_pressed " << int(key_pressed) << endl;
switch( key_pressed )
{
case 27: //esc
{
//close all windows and quit
destroyAllWindows();
}
...
但是这段代码不起作用,在输出中我有key_pressed 1048603
此代码工作:
char key_pressed = cv::waitKey();
cout << "key_pressed " << int(key_pressed) << endl;
switch( key_pressed )
{
case 27: //esc
{
//close all windows and quit
destroyAllWindows();
}
...
这段代码正在工作,在输出中我有key_pressed 27
这种行为的原因可能是什么?
附言文档说 cv::waitKey() 返回int
,那么为什么我们应该将其转换为 char
呢?
这个函数高度依赖于操作系统:/其中一些在整数中添加了位....
它应该返回按键的 ASCII 代码,例如,27
是ESC
键的 ASCII 代码...
现在,问题是知道当您将 int 转换为char
时会发生什么。
在本例中:它是实现定义的。(这就是标准所说的)这是类似案例的链接
一些解决方案:
1)将其放入字符变量中...尽管它是实现定义的,但它似乎是最常见的工作解决方案之一(在某些OpenCV示例中,他们使用它)
2)使用int key = cv::waitKey(1) & 255
。它将消除多余的位...
为了更进一步,让我们检查值:
You obtained as an int: 1048603
in binary it will be: 00000000 00010000 00000000 00011011
27 in binary is: 00000000 00000000 00000000 00011011
正如你所看到的,它们在孤独的一点上有所不同......最安全、最便携的方法是使用按位逻辑运算将其删除,例如我的 2 号解决方案。其他人使用一些十六进制值而不是 255,例如0xEFFFFF二进制将是
00000000 11101111 11111111 11111111
为什么会这样?
我搜索过一次,如果您numslock
或capslock
或ctrl
密钥处于活动状态,似乎有些位会发生变化......同样,这取决于平台。
相关文章:
- 方法错误"not all control paths return a value"和方法不返回值
- 如何解决类成员函数中的"return a value"错误?
- QThread start() return value
- 警告:"Not all control paths return a value" c++
- What value should `std::stringstream::fail()` return after r
- Return value of std::hash ofr (x86/x64)
- 在这个程序中"getavg must return value"意味着什么?
- OpenCV HOGDescriptor return value
- 虚假"<function> is expected to return a value"警告?
- Opencv cv::waitKey() return value
- 我返回一个值,但编译器告诉我"function must return a value"
- const object&return value from a method, best practice
- 循环函数给出"return’ with a value, in function returning void"误差
- Return-value C++
- 计算距离:方法"must return a value" ?
- c++ rapidjson return value
- CAsyncSocket receive() return value
- boost program_options add_options return value
- 如何在java中执行"an exe with return value"?
- return value-C++:由私有方法返回的本地typedef