gpt4 book ai didi

c++ - opencv mat扫描随机时间窃取

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:52:07 25 4
gpt4 key购买 nike

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

应用程序时间紧迫。

对于大多数运行, strip 过滤器需要 <<1 毫秒。问题:每隔几个过滤器(可以在 10 到 40 之间,具体取决于 strip 大小),运行需要 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
}
}

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

感谢您的帮助。非常感谢,哈佛商业评论。

最佳答案

过滤操作通常不需要单独访问像素。您遗漏了算法的细节 - 也许您可以使用像 threshold 这样的 OpenCV 函数来实现它和相关的,这将适用于整个形象。这些方法针对内存访问进行了优化,因此您不必花时间来追踪此类时序问题。

关于c++ - opencv mat扫描随机时间窃取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26592227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com