侵蚀太慢了 - Opencv

时间:2015-06-24 11:30:19

标签: c++ performance opencv

我将{strong>侵蚀操作应用于Mat,但速度非常慢。

因为在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)。

提前谢谢

1 个答案:

答案 0 :(得分:4)

我找到了腐蚀的原因。原因有三个:

  1. 正如@Micka所说,内核大小很大。我减少它越多,它就越快
  2. 但是,我不能这样做,因为我需要这个内核大小。所以我继续寻找另一个原因,并发现:

    1. 内核类型(MORPH_ELLIPSE)。如果我将其更改为MORPH_RECTMORPH_CROSS,则会更快
    2. 由于我的应用适用于所有应用,我只是将其更改为MORP_RECT

      1. 调试 - >发布:正如我在@drescherjm所说的那样,我已经将我的项目配置为在发布模式下运行(加上从调试库到发布版本的依赖性),它也有助于提高性能。不是第二个原因,而是一个不错的镜头。
      2. 感谢大家的评论,帮助我找到了这些