MatIterator_是否比任何有意义的原始指针效率低?

时间:2014-11-28 17:11:16

标签: c++ performance opencv iterator

在阅读扫描图像教程时,我会描述The iterator (safe) method,然后有The efficient way

但是根据我对std::vector的经验,例如,迭代器和原始指针在速度方面基本相同 - 我怀疑生成的程序集/可执行代码在发布版本中甚至是不同的。 cv :: Mat也不是这样吗?因为它在教程中表达的方式,暗示MatIterator_更安全,但更慢。

另外,如果速度较慢,它的速度会慢多少百分比?它是否以有意义的方式变慢,比如慢10%,或者更慢0.1%?

注意:我正在讨论发布版本,并启用了所有优化功能。在Debug构建中,迭代器很可能有断言和什么不是。

1 个答案:

答案 0 :(得分:0)

我找到了效果比较at the end of the same tutorial,因此我将在此处发布结果:

  

表现差异

     

为了获得最佳结果,请编译程序并以您自己的速度运行它。为了更好地展示差异,我使用了相当大的(2560 X 1600)图像。此处介绍的性能适用于彩色图像。为了得到更准确的值,我将函数调用得到的值平均了100次。

     

高效方式79.4717毫秒
  迭代器83.7201毫秒
  飞行中RA 93.7878毫秒
  LUT功能32.5759毫秒

     

我们可以总结一些事情。如果可能,请使用已经制作的   OpenCV的功能(而不是重新发明)。最快的方法   原来是LUT功能。这是因为OpenCV库   通过英特尔螺纹构建模块启用多线程。然而,   如果你需要写一个简单的图像扫描更喜欢指针方法。   迭代器是一个更安全的赌注,但速度相当慢。使用   用于全图扫描的动态参考访问方法是最多的   调试模式很昂贵。在释放模式下,它可能击败迭代器   是否接近,但它确实牺牲了安全性   迭代器的特征。

这意味着迭代器方法在这些性能测试中比原始指针慢5%。