使用cv :: waitKey而不必首先调用cv :: namedWindow或cv :: imshow

我正在使用Qt编写GUI程序并使用OpenCV进行一些视频处理。 我在主GUI线程中的标签中显示OpenCV进程(它位于单独的线程中)的结果。

我遇到的问题是cv :: waitKey不起作用,除非我打开使用cv :: namedWindow或cv :: imshow打开的本机OpenCV窗口。 有人知道如何解决这个问题吗?

简短例子:

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"); 即评论,程序崩溃与访问冲突错误。

cv::namedWindow("test"); 即未注释,该程序显示完美,但有一个窗口(命名测试),我不想或不需要。 任何人?


cv::waitKey()只适用于OpenCV窗口,这不是你现在使用的。

我建议你研究QT替代方案,最有可能的是qSleep() ,它由QTest模块提供:

QTest::qSleep(40);


我找到了一个使用msleep()的解决方案。 它很容易使用,因为它是QThread类的成员。

只是以为我会更新这个以防万一有类似问题的人发现这个线程。

链接地址: http://www.djcxy.com/p/95059.html

上一篇: Using cv::waitKey without having to call cv::namedWindow or cv::imshow first

下一篇: c++