cv::imshow 有时很慢
cv::imshow sometimes is very slow
我对cv::imshow
有问题。对于我的图像大小,它通常消耗大约 1-2 毫秒的处理时间,但在处理管道中的某个时刻,它对相同类型的图像使用 4-8 毫秒。
我有一个方法
void Tool::displayImage()
{
startTimeMeasure();
cv::imshow("output",image);
evaluateTimeMeasure();
}
image
是一个成员变量,Highgui 窗口是在其他地方创建的。时间测量适用于boost::posix_time ptime
和time_duration
。
cvStartWindowThread();
被召唤了。
关键是,如果在复杂的处理链中调用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
)。
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 概念中的cv限定符需要表达式参数列表
- 将CHW格式的浮点向量转换为cv::Mat
- 错误的cv::face FacemarkLBF实例化
- 如何检查给定的参数是否为 cv::noArray()?
- 开放 CV 中的动态内存分配,用于视频处理
- 如何在 opencv 中使用 cv::VideoCapture::waitAny()
- 错误:未定义对cv::cudacodec::createVideoReader的引用
- OpenCV 3.4.1 error readNetFromTensorflow 无法在 cv::d nn::ReadProtoFromBinaryFile 中打开 .pb
- C++:从GPU内存(cudaMemcpy2D)获取BGR图像(cv::Mat)
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- OpenCV cv::imshow() GUI not showing
- 未解决的外部CV :: FLIP CV :: IMShow
- Visual Studio 2015 OpenCV Assertion 在 cv::imshow windows 中失败 (size.width>0 && size.height>0.cp
- cv::imshow在GUI应用程序运行时阻塞线程
- cv::imshow 有时很慢
- 在 cv::imshow() 中获取错误 - ASSERT:在文件 qasciikey.cpp 中"false",第 501 行
- cv::imshow 似乎损坏了一些内存区域
- 使用 cv::waitKey,而不必先调用 cv::namedWindow 或 cv::imshow
- cv::imshow 在不同的线程上不显示 cv::mat 颜色