我正在用Qt编写一个图形用户界面程序,并用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"); )。有人吗?
发布于 2012-05-18 06:51:26
我找到了一个使用msleep()的解决方案。它很容易使用,因为它是QThread类的成员。
我想我应该更新这篇文章,以防有类似问题的人发现这个帖子。
发布于 2012-05-17 22:35:42
cv::waitKey()只适用于OpenCV窗口,这不是您现在正在使用的窗口。
我建议您研究由QTest模块提供的QT替代方案,最有可能的是qSleep():
QTest::qSleep(40);发布于 2012-05-17 22:18:51
waitkey是opencv的显示窗口的gui循环的一部分
如果您只是想等待一个按键,请参阅QWaitcondition。
或者,您可以显示另一个没有图像的命名窗口,或者显示一个较小的1,1像素图像而忽略该窗口
https://stackoverflow.com/questions/10637269
复制相似问题