【问题标题】:Erode is too slow - Opencv侵蚀太慢 - Opencv
【发布时间】:2015-06-24 11:30:19
【问题描述】:

我正在对 Mat 应用 erode 操作,但速度非常慢。

由于在 OpenCV 中,您可以通过两种不同的方式应用它(使用 morphologyEx 和使用 erode)。

我正在(大约)测量它的运行速度,但它们都非常慢!

这部分的代码是:

    int morph_size = 20;
    Mat element = getStructuringElement( MORPH_ELLIPSE, cv::Size( 2*morph_size + 1 , 2*morph_size +1), cv::Point( morph_size, morph_size ) );

    // morphologyEx(imgMascara, imgMascara, MORPH_ERODE, element );
finish_time5 = clock();

    erode( imgMascara, imgMascara, element );

finish_time6 = clock();

其中imgMascaraMat。然后,当我测量从finish_time5finish_time6 开始的时间时,我得到:

0.0198s
0.887s

知道为什么要花太多时间吗? (这两种功能都会发生,morphologyExerode)。

提前谢谢你

【问题讨论】:

  • 这是发布版本吗?我已经看到在 Visual Studio 上进行调试构建所需的时间是在某些图像处理算法上发布构建的 100 倍。
  • 这是一个调试版本@drescherjm,然后我将尝试在发布中执行它!
  • 你非得用这么大的尺寸吗?
  • 我没有@Micka,我的图片尺寸比高清还小。
  • 您的结构元素大小为 41...如果您(可以)大幅减小该大小,您的代码应该会更快。

标签: c++ performance opencv


【解决方案1】:

我找到了侵蚀缓慢的原因。有三个不同的原因:

  1. 正如@Micka 所说,内核大小很大。我减少得越多,它变得越快

但是,我不能这样做,因为我需要这个内核大小。于是我继续寻找另一个原因,结果发现:

  1. 内核类型 (MORPH_ELLIPSE)。如果我将其更改为 MORPH_RECTMORPH_CROSS,它会变得大大更快。

由于我的应用程序适用于所有这些,我只是将其更改为MORP_RECT

  1. 调试 -> 发布:正如@drescherjm 所说,我已将我的项目配置为在发布模式下运行(加上从调试库到发布库的依赖性),它有助于提高性能也。与其说是第二个原因,倒不如说是个好机会。

感谢大家帮助我找到这些的cmets

【讨论】:

  • 我想知道,是什么让 MORPH_ELLIPSE 比其他内核慢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多