侵蚀太慢 - Opencv

Btc*_*ces 1 c++ performance opencv

我正在对 a应用侵蚀操作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();
Run Code Online (Sandbox Code Playgroud)

哪里imgMascaraMat. 然后,当我测量从开始到finish_time5和的时间时finish_time6,我得到:

0.0198s
0.887s
Run Code Online (Sandbox Code Playgroud)

知道为什么需要太多时间吗?(它发生在两个函数,morphologyExerode)。

先感谢您

Btc*_*ces 5

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

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

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

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

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

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

感谢大家的评论,这些评论帮助我找到了这些

  • 我想知道,与其他内核相比,是什么让 MORPH_ELLIPSE 变慢了? (2认同)