opencv:无法通过waitKey读取大写字母

时间:2014-02-16 20:50:03

标签: c++ opencv ubuntu

我在无限循环内有一个简单的开关盒,根据用户按下的键调用函数。我使用opencv库在C ++中编程。 下面使用的waitKey函数能够读取我在键盘上按下的小写字母。然而,我无法阅读任何大写字母,它仍然会读取并将其解释为相应的小写字母。 在这方面的任何帮助表示赞赏。我应该更新我的opencv库吗?我在this post

的帮助下在ubuntu上安装了opencv

os UBUNTU 13.10 opencv版本2.4.8

伪代码

while(1)
{`
    char k = waitKey(0);
    switch(k) {
        case 'a' : ... break;
        case 'b' : ... break;
        case 'A' : ... break; // UNABLE TO READ A here.
    }
}

2 个答案:

答案 0 :(得分:1)

我在OpenCV论坛上发现了一个与您的问题相关的小提示,但尚未找到它:http://answers.opencv.org/question/4266/cvwaitkey-upper-lowercase-difference/

答案 1 :(得分:0)

我有同样的问题(使用opencv-4.x)。 我认为这是由于我使用cmake选项-D WITH_QT=ON编译了opencv(以对图像启用缩放滚动)。但是Qt将q和Q解释为相同的键码(81);唯一的事情是它添加了一个(shift)修饰符。

比方说,您在C ++ / Qt程序中收到一个QKeyEvent事件。然后按一下即可得到

  • 'Q':event.key()= 81,event.modifiers()。testFlag(Qt :: KeyboardModifier :: ShiftModifier)= true
  • 'q':event.key()= 81,event.modifiers()。testFlag(Qt :: KeyboardModifier :: ShiftModifier)= false

不幸的是,cv::waitKeycv::waitKeyEx似乎在opencv使用Qt时不读取修饰符,仅读取键代码...

到目前为止,我发现的唯一选择是-D WITH_QT=OFF 重新编译。然后,我可以区分Q和q(但也可以区分左箭头和Shifted左箭头等等)。但是要权衡的是我不能再滚动图像了……