OpenCV与Python:连通组件分析

2024-06-16 12:42:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个在C语言中工作的连接组件分析代码,它实际上是“学习Opencv”一书的副本。

现在,我正在将所有代码重写为Python,但在Python API中找不到某些函数,比如cvstartfindcours。

我想知道是否有人用Python实现了一个基本的连接组件分析函数。我知道有一些库,但我正在寻找更简单的东西,只是一个函数或一段代码。

我不需要任何“大”,因为我有一个2或3个白色圆圈的纯黑色图像,我想找到圆圈的数量和中心。

我知道我可能可以自己编写代码,但我更喜欢使用某人的函数或简单的库。

编辑:我是这样解决的。

def find_connected_components(img):
    """Find the connected components in img being a binary image.
    it approximates by rectangles and returns its centers
    """

    storage = cv.CreateMemStorage(0)
    contour = cv.FindContours(img, storage, cv.CV_RETR_CCOMP, cv.CV_CHAIN_APPROX_SIMPLE)
    centers = []

    while contour:
        # Approximates rectangles
        bound_rect = cv.BoundingRect(list(contour))

        centers.append(bound_rect[0] + bound_rect[2] / 2, bound_rect[1] + bound_rect[3] / 2)

        contour = contour.h_next()

Tags: 函数代码rectimgcomponents组件storagecv
3条回答

你应该看看文件。对于OpenCV 2.2,Python有一个完整的新接口,它涵盖了所有C/C++功能:

^{}应该对你有用:)

作为scikit图像的一部分,有BSD许可连接组件代码(Cython格式):

https://github.com/scikit-image/scikit-image/blob/master/skimage/measure/_ccomp.pyx

如果你安装了这个软件包,它就简单到

from skimage import measure
import numpy as np

L = measure.label(image)
print "Number of components:", np.max(L)

有点过时的回复,但也有这个补丁: http://code.opencv.org/attachments/467/opencv-connectedcomponents.patch

应该是一个更快的实现,仍然很容易调用。 将来某个时候应该整合到主线上。。。

编辑:在3.0发布之前,它已经在主线上运行了一段时间。别问我为什么他们不早点放出来!

免责声明-我是作者:-)

相关问题 更多 >