python - OpenCV 和 Python : Connected components analysis

标签 python image-processing opencv computer-vision

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

现在我正在将所有代码重写为 Python,但我无法在 Python API 中找到某些函数,例如 cvStartFindContours。

我想知道是否有人用 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()

最佳答案

有 BSD 许可连接组件代码(在 Cython 中)作为 scikit-image 的一部分:

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)

关于python - OpenCV 和 Python : Connected components analysis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9291175/

相关文章:

opencv - haskell-opencv 中的 GaussianBlurImage(Haskell 绑定(bind)到 OpenCV-3.1)

python - 使用 Python 进行视网膜血管分割

Android NDK 访问 XML 文件

c# - 如何在 WSDL 中定义一组自定义类型?

python - 单击一个复选框后,两个复选框都会被选中

matlab - 使用 MATLAB 从图像中删除对象

opencv - 对于尺度不变的特征提取,是否有 SURF 和 SIFT 的快速替代方法?

python - 创建一个唯一的文件系统路径,没有任何实际文件

python - Django:在 get_queryset 中返回 HttpResponseRedirect

c# - Emgucv 有 BackgroundSubtractorMOG 和 BackgroundSubtractorMOG2 吗?