cv :: imshow有时非常慢

我有一个cv::imshow的问题。 对于我的图像大小,它通常会消耗大约1-2毫秒的处理时间,但在我的处理管道中的某个点上,它会使用4-8毫秒来处理相同类型的图像。

我有一个方法

void Tool::displayImage()
{
   startTimeMeasure();
   cv::imshow("output",image);
   evaluateTimeMeasure();
}

image是一个成员变量,highgui窗口是在其他地方创建的。 时间测量适用于boost::posix_time ptimetime_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()是间歇性缓慢等),这往往通过在它之前添加一个小睡来解决。

  • 禁用视频驱动程序中的垂直同步可能会有所帮助。
  • 没有太多的图像窗口打开(许多OpenCV程序的典型瘟疫)有帮助。
  • 使用与OpenGL不同的API来创建窗口可能会有所帮助(可能需要重新编译highgui )。
  • 链接地址: http://www.djcxy.com/p/17009.html

    上一篇: cv::imshow sometimes is very slow

    下一篇: MySQL Query For Total Online Time Based On Login/Logout Entries