OpenCV和Python:连接组件分析
computer-vision
image-processing
opencv
python
8
0

我有一个在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()
参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

OpenCV 3.0.0-dev具有connectedComponents功能,但是文档说它仅适用于C ++。

收藏
评论

有点过时的答复,但也有此修补程序: http : //code.opencv.org/attachments/467/opencv-connectedcomponents.patch

应该是目前最快的实现方式之一,并且仍然易于调用。应该在将来的某个时候集成到主线中...

编辑:它一直在等待3.0版本发布的主线中。不要问我为什么他们没有更早发布它!

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

收藏
评论

作为scikit-image的一部分,有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)
收藏
评论

您应该看一下文档。从OpenCV 2.2开始,Python有了一个完整的新接口,它涵盖了所有C / C ++函数:)

cv.FindContours应该适合您:)

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题