在Windows和Linux中waitKey()的不同行为

时间:2016-01-11 20:24:34

标签: c++11 gcc mingw opencv3.0

我有以下代码:

#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;。

你知道吗? 谢谢,

1 个答案:

答案 0 :(得分:1)

cv :: waitKey(int)函数的实现完全依赖于底层UI框架。对于Windows OS,常见的窗口显示框架包括.Net,QT和MFC。在Linux发行版中,窗口显示框架通常包括GTK,QT,VTK等。您可以找到不同版本的 waitKey(int)实现是OpenCV的 highgui 模块源代码, gtk 版本似乎没有处理击键组合,它是通过使用 GMutex 来处理的。因此,如果要处理组合键,可能必须更改UI框架或修改实现,并使用选定的UI框架重新编译OpenCV。