cv :: imshow有时非常慢
我有一个cv::imshow
的问题。 对于我的图像大小,它通常会消耗大约1-2毫秒的处理时间,但在我的处理管道中的某个点上,它会使用4-8毫秒来处理相同类型的图像。
我有一个方法
void Tool::displayImage()
{
startTimeMeasure();
cv::imshow("output",image);
evaluateTimeMeasure();
}
image
是一个成员变量,highgui窗口是在其他地方创建的。 时间测量适用于boost::posix_time ptime
和time_duration
。
cvStartWindowThread();
被称为。
重点是,如果在复杂的处理链(从videofile加载图像,进行一些预处理等)中调用displayImage()
, cv::imshow
变得非常缓慢,而在“已暂停”视频中调用更新图像的调用是非常快。
如果我在时间测量开始之前添加cv::waitKey(10)
,则cv::imshow
会变快。 所以可能会有一些(gui?)的东西需要处理,它会阻止cv::imshow
? 在循环中的一个单独的线程中调用cv::waitKey(40)
,该循环等待键盘输入来控制(例如暂停/恢复)视频。 据我所知, cv::imshow
是在cv::waitKey
时期处理的某种队列中执行的!!? 我在哪里可以找到有关在那个时候执行的所有任务的信息? 也许我可以重新安排我的代码的某些部分(现在非常复杂),以便更快地进行imshow
。
那么在cv::imshow
调用中会发生什么,以及在不同情况下缓慢/快速执行相同调用的原因是什么?
编辑 :我认识到正常执行和处理'暂停'模式之间的一个区别是,在暂停模式下,该方法是从一个绑定的鼠标回调函数(这是从windowThread
?)开始的,而在常规模式下,它是从主处理线。
这是OpenGL的一个典型问题,OpenCV窗口可以使用OpenGL创建。 SwapBuffers
存在问题(请参阅SDL_GL_SwapBuffers()是间歇性缓慢等),这往往通过在它之前添加一个小睡来解决。
highgui
)。 上一篇: cv::imshow sometimes is very slow
下一篇: MySQL Query For Total Online Time Based On Login/Logout Entries