opencv mat扫描随机时间窃取
opencv mat scan random time stealing
我的应用程序是基于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函数来实现它,比如阈值和相关函数,它将对整个图像起作用。这些方法针对内存访问进行了优化,因此您不必花费时间来跟踪这样的时间问题。
相关文章:
- Deque 中元素的随机访问如何提供恒定的时间复杂度?
- SDL_Mixer再次播放时,从随机位置开始一段时间,然后从头开始
- 随机不工作 C 中的计数时间
- 从容器中获取随机元素,该容器在恒定时间内没有严格的元素顺序
- 如何在当前时间,显示标头并将随机出生日期分配给X人数(C )时如何播种随机数生成器(C )
- C++时间()给我的结果几乎是随机的
- 随机队列模拟器客户到达时间
- 生成一个随机种子给srand()-不是时间(NULL)
- SDL C++ TTF 会在一段时间后随机消失(并且不会回来)
- 将标准::时间与随机整数混合
- 具有随机分量的算法的时间复杂度(吉莱斯皮算法)
- opencv mat扫描随机时间窃取
- 在确定的时间内生成特定数字的随机序列
- c++随机数字总是相同的,即使时间(0)作为种子
- 如何在小于O(n)的时间内选择std::集合中的一个随机元素
- 在无限循环中,Std::thread在随机时间后锁定
- 使用libevent读取连续的HTTP流并在随机时间发送数据
- 在C++中随机生成日期和时间
- 随机高斯函数的时间复杂度
- 如何在任意随机时间退出选定的系统调用