首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cv::waitKey,而不必先调用cv::namedWindow或cv::imshow

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

Stack Overflow用户
提问于 2012-05-17 22:06:14
回答 4查看 5.9K关注 0票数 3

我正在用Qt编写一个图形用户界面程序,并用OpenCV做一些视频处理。我在主GUI线程的标签中显示OpenCV进程的结果(在单独的线程中)。

我遇到的问题是cv::waitKey无法工作,除非我使用cv::namedWindow或cv::imshow打开一个本机OpenCV窗口。有人知道怎么解决这个问题吗?

简短的示例:

代码语言:javascript
复制
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"); )。有人吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-18 06:51:26

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

我想我应该更新这篇文章,以防有类似问题的人发现这个帖子。

票数 1
EN

Stack Overflow用户

发布于 2012-05-17 22:35:42

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

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

代码语言:javascript
复制
QTest::qSleep(40);
票数 4
EN

Stack Overflow用户

发布于 2012-05-17 22:18:51

waitkey是opencv的显示窗口的gui循环的一部分

如果您只是想等待一个按键,请参阅QWaitcondition

或者,您可以显示另一个没有图像的命名窗口,或者显示一个较小的1,1像素图像而忽略该窗口

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10637269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档