【问题标题】:What is the algorithmic efficency of findContours method implemented in OpenCV?OpenCV 中实现的 findContours 方法的算法效率如何?
【发布时间】:2019-08-02 04:03:14
【问题描述】:

我对@9​​87654323@ 方法的算法效率有疑问,该方法在 OpenCV 中实现。假设我有一个或多或少看起来像这样的代码(在 Python 3.6 中,但在 C++ 中看起来几乎相同):

# ... Some image processing code ...
_, contour, _ = cv2.findContours(img_mtx_binary, 
                                 cv2.RETR_TREE, 
                                 cv2.CHAIN_APPROX_NONE)
# ... More image processing code ...

其中 img_mtx_binary 可以是 Numpy 矩阵或 C++ Mat 对象,其中包含二进制 0 或 255 图像,contour 是已创建轮廓的列表。图片大小为 NxM

Big O 表示法实现算法的效率(或效率范围)是多少?我发现它使用了铃木算法[1],但是在官方论文[2]我找不到关于这个的明确信息。

一切顺利,

米沃什

【问题讨论】:

    标签: python algorithm opencv image-processing big-o


    【解决方案1】:

    当算法找到所有轮廓时,它必须至少查看每个像素一次。对于轮廓跟踪,它最多查看每个像素的 8 个相邻像素,并且通过标记过程避免多次处理相同的像素。每个像素的操作数是有限的。

    所以运行时间是 O(NM),如果你更喜欢图像区域的线性,这是最佳的。这个术语很可能(渐近地)主导了额外的簿记。

    【讨论】:

    • 非常感谢。与源代码相比,它似乎是正确的答案。
    猜你喜欢
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多