C++ OpenCVでwaitKey関数が動作しない問題

OpenCV(C++)の「waitKey」関数について、動作するときとしない時があり、原因を調べましたので備忘録に残したいと思います。

環境

  • Windows 10 Pro バージョン 1903
  • Visual Studio 2019 Community Version 16.4.2
  • OpenCV 3.4.7

概要

OpenCVのwaitKey関数を使用した際にキー入力しても受け付けない。
指定した時間経過後にwaitKeyの返り値をを確認すると、キー入力を常にしていても -1 となってしまう。

waitKey 関数が動作しないコード

#include <iostream>
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main()
{
    cout << "Application Start" << endl;

    cout << "waitKey" << endl;

    int keyCode = waitKey(10000);

    cout << "keyCode=" << keyCode << endl;
}

waitKey 関数が動作するコード

#include <iostream>
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main()
{
    cout << "Application Start" << endl;

    Mat img = imread("C:\\test.png");
    imshow("window", img);

    cout << "waitKey" << endl;

    int keyCode = waitKey(10000);

    cout << "keyCode=" << keyCode << endl;
}

原因

画像(Matオブジェクト)を「imshow」関数で表示していないと、「waitKey」関数が動作しませんでした。
公式のドキュメントを調べると、1つ以上のHighGUIウィンドウがアクティブでないと機能しないとの記載がありました。

この関数は、少なくとも1つのHighGUIウィンドウが作成されていて、そのウィンドウがアクティブである場合にのみ機能します。 複数のHighGUIウィンドウがある場合、それらのいずれかをアクティブにできます。

参考:
https://docs.opencv.org/3.4.7/d7/dfc/group__highgui.html#ga5628525ad33f52eab17feebcfba38bd7

コメント

タイトルとURLをコピーしました