opencv mat扫描随机时间窃取

opencv mat scan random time stealing

本文关键字:时间 随机 mat 扫描 opencv      更新时间:2023-10-16

我的应用程序是基于C++OpenCV的,它需要通过阈值过滤来检测图像中的对象。由于性能原因,我把图像分成了小条。我只扫描我需要的区域。图像是2400x1800像素。板条为1000x50。图像颜色空间是HSV。由于所需的对象可以是几种颜色中的一种(例如8种),所以我在每条带上运行过滤器8次。因此,在应用程序中,我运行了几十次过滤器。

应用程序是时间关键型的。

对于大多数运行,带式过滤器需要<lt;1毫秒。问题是:每隔几个过滤器(根据条带的大小,可以在10到40之间),运行需要15毫秒(总是相同的15毫秒)!

总运行时间应为1-2毫秒,运行时间在50到100毫秒之间,具体取决于15毫秒的运行次数。

访问Mat并导致时间窃取的代码的核心如下所示:

for i....{  // cols
for j....{    // rows
p1i=img_hsv.at<uchar>(j,i*3+0);  // H 
p2i=img_hsv.at<uchar>(j,i*3+1);  // S
p3i=img_hsv.at<uchar>(j,i*3+2);  // V
}
}

同样,盗窃率随着条形尺寸的增加而增加。我认为这与访问PC内存资源有关。我已经尝试更改页面大小,或者将代码定义为关键部分,但没有成功。该应用程序基于Win32 XP或7。

感谢你的帮助。非常感谢,HBR。

通常不需要单独访问像素进行过滤操作。你忽略了算法的细节——也许你可以通过使用OpenCV函数来实现它,比如阈值和相关函数,它将对整个图像起作用。这些方法针对内存访问进行了优化,因此您不必花费时间来跟踪这样的时间问题。