3

Qt を使用して GUI プログラムを作成し、OpenCV でビデオ処理を行っています。メイン GUI スレッドのラベルに (別のスレッドにある) OpenCV プロセスの結果を表示しています。

私が抱えている問題は、cv::namedWindow または cv::imshow を使用して開いたネイティブ OpenCV ウィンドウを開かない限り、cv::waitKey が機能しないことです。これを解決する方法を知っている人はいますか?

短い例:

void Thread::run()
{
    //needed variables
    cv::VideoCapture capture(0);
    cv::Mat image;

    //main loop
    //cv::namedWindow("test");
    forever
    {
        capture>> image;
        if(!image.data)
            break;
        emit paintToDisplay(convertToQImage(image));
        cv::waitKey(40);
    }
}

//cv::namedWindow("test");ie をコメントすると、アクセス違反エラーでプログラムがクラッシュします。

つまり、コメントをcv::namedWindow("test");外すと、プログラムは完璧に表示されますが、不要または必要のないウィンドウ (test という名前) があります。誰か?

4

4 に答える 4

4

cv::waitKey()現在使用しているものではないOpenCVウィンドウでのみ機能します。

QTestモジュールqSleep()によって提供される、おそらく QT の代替案を調査することをお勧めします。

QTest::qSleep(40);
于 2012-05-17T14:35:41.977 に答える
2

cv::waitkey は、ショー ウィンドウの opencv の GUI ループの一部です。

キーが押されるのを待つだけの場合は、QWaitconditionを参照してください。

または、画像のない別の名前付きウィンドウ、または小さな 1,1 ピクセルの画像を表示して、ウィンドウを無視することもできます。

于 2012-05-17T14:18:51.367 に答える
1

使用する解決策を見つけましたmsleep()。クラスのメンバーなので使いやすいQThreadです。

同様の問題を抱えている人がこのスレッドを見つけた場合に備えて、これを更新すると思いました。

于 2012-05-17T22:51:25.540 に答える