OpenCV:cv::imshow()冻结

OpenCV:cv::imshow()冻结,opencv,freeze,Opencv,Freeze,我已经编写了一些代码,目前由两个窗口组成,用于显示某些处理算法的不同阶段。很简单,我用cv::namedWindow()创建了两个窗口,并用cv::imshow()显示cv::Mat。我遇到了一个问题,即偶尔(但并非总是)随机地,cv::imshow()拒绝更新这两个窗口。程序还没有挂起,我可以看到它仍在工作并处理传入的帧(因为我正在将内容打印到终端以显示这一点),只是窗口没有显示新帧。每次调用cv::imshow(),我都会在调用之后加入cv::waitKey(2),但是这没有帮助 这很烦人,

我已经编写了一些代码,目前由两个窗口组成,用于显示某些处理算法的不同阶段。很简单,我用
cv::namedWindow()
创建了两个窗口,并用
cv::imshow()
显示
cv::Mat
。我遇到了一个问题,即偶尔(但并非总是)随机地,
cv::imshow()
拒绝更新这两个窗口。程序还没有挂起,我可以看到它仍在工作并处理传入的帧(因为我正在将内容打印到终端以显示这一点),只是窗口没有显示新帧。每次调用
cv::imshow()
,我都会在调用之后加入
cv::waitKey(2)
,但是这没有帮助

这很烦人,而且我似乎在网上找不到任何东西。这种情况并不总是发生,但经常发生。有时需要几分钟,有时需要几秒钟


我在OpenCV 2.3.1上使用Ubuntu12.04(和Ubuntu11.10——在我的两台装有两个不同摄像头的机器上都会发生这种情况)。

我解决这个问题的一种方法是使用 cv::destroyWindow()
在呼叫窗口之后。如果您只是在显示一系列图像,这一点很好,但如果您在显示视频,则效果不太好。

很可能是传入帧的问题。您还可以考虑检查垫中随机独立元素的值,以查看它们是否确实正确。请发布导致此问题的代码。请尝试更大的延迟:waitKey(20);可能是您的计算机无法在2毫秒内处理imshow()请求。@瓦西里:这似乎没有什么区别。@go4sri:代码相当大,相当复杂。我想可能是我错过了一个.release()或其他什么东西,但我只是检查了一下,没有。我正在重用相同的变量,但是帧本身被另一个线程捕获并放在缓冲区中。我不确定会出什么问题,因为其他一切都正常工作,其中一些问题取决于
cv::Mat
@vasile的某些元素waitKey在图像显示后延迟,不包括加载和显示图像的时间。不幸的是,我正在实时显示相机的帧,所以这行不通。你能澄清一下在哪里确切地使用
cv::destroyWindow()
?这是否紧跟在
cv::waitKey()
之后?