【发布时间】:2014-12-22 21:46:06
【问题描述】:
我的应用程序是基于 C++ OpenCV 的,它需要通过阈值过滤来检测图像中的对象。由于性能原因,我将图像分成小条。我只扫描我需要的区域。图像为 2400x1800 像素。条带为 1000x50。图像色彩空间是 HSV。由于所需的对象可以是少数几种颜色之一(例如 8 种),我每条运行过滤器 8 次。所以,在应用程序中,我运行了几十次过滤器。
应用程序对时间要求很高。
对于大多数运行,条形过滤器需要
应该在 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。
感谢您的帮助。 非常感谢, 哈佛商业评论。
【问题讨论】:
-
确保您使用的是 opencv 发行版,因为调试中的 Mat::at() 非常慢...
标签: c++ performance opencv time mat