我有一个问题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
?)开始,而在常规模式下,它从主处理线程开始.