我有以下代码:
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv/cv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat image(200, 200, CV_8UC3, Scalar(0, 255, 0));
namedWindow("Displayimage", CV_WINDOW_AUTOSIZE);
imshow("Displayimage", image);
int key = -1;
while (key!=27) {
key = waitKey(0);
cout << key << endl;
}
return 0;
}
当我在Windows上运行它(CodeBlocks + minGW)并按&#34; Shift&#34; - &GT;没有任何反应,并为&#34; a&#34;提供不同的代码。和&#34; A&#34; - &GT;好的
当我在Linux / Ubuntu(CodeBlocks + GCC)上运行它并按&#34; Shift&#34; - &GT;它返回Shift键的代码,不允许我按&#34; SHIFT + a&#34;。它总是为&#34; a&#34;返回相同的代码。和&#34; A&#34;。
你知道吗? 谢谢,答案 0 :(得分:1)
cv :: waitKey(int)函数的实现完全依赖于底层UI框架。对于Windows OS,常见的窗口显示框架包括.Net,QT和MFC。在Linux发行版中,窗口显示框架通常包括GTK,QT,VTK等。您可以找到不同版本的 waitKey(int)实现是OpenCV的 highgui 模块源代码, gtk 版本似乎没有处理击键组合,它是通过使用 GMutex 来处理的。因此,如果要处理组合键,可能必须更改UI框架或修改实现,并使用选定的UI框架重新编译OpenCV。