【问题标题】:Calculate the center of a contour/Area计算轮廓/区域的中心
【发布时间】:2010-11-01 09:15:01
【问题描述】:

我正在研究一个图像处理链,它通过颜色和轮廓分离单个对象,然后计算该对象的 y 位置。

如何使用 OpenCV 计算轮廓或区域的中心?

Opencv 链接:

【问题讨论】:

    标签: python image-processing opencv contour


    【解决方案1】:

    您可以通过首先计算Moments 来获得y 方向的质心。然后质心由yc = M01 / M00 给出,其中 M01 和 M00 是 Moments 调用返回的结构中的字段。

    如果您只想要边界矩形的中心,使用BoundingRect 也很容易。这将为您返回一个 CvRect,您可以只取一半的高度。

    如果这还不够精确,请告诉我,我有示例代码可以为您挖掘。

    【讨论】:

    • 第三,您可以计算 Convex Hull 及其矩(这实际上是 BoundingRect 中的第一个内部步骤)。第四,您可以仅计算轮廓像素(即恰好位于轮廓上的像素)的质心。所有这些方法都会给出不同的值,它们的用途将取决于您的应用程序的具体需求。
    • 轮廓点的中心不是重心。 99% 的轮廓点可以集中在一个变化很大的小区域,只有 3 个覆盖了较大规则形状的其余部分。
    • 轮廓的矩不是通过对轮廓点求和而是通过使用格林定理来计算的。结果与计算图像中填充轮廓的质心不完全相同,但相似,并且无论如何都不会像您建议的那样因轮廓点分布的不规则性而倾斜。
    【解决方案2】:

    我不完全了解 OpenCV 是什么,但我建议这样做:

    所选像素簇在某一点具有最大宽度 - w - 所以可以说该区域有 w 个垂直像素列。现在我将根据列包含的像素数对列进行加权,并使用这些列权重来确定水平中心点。

    同样的算法也适用于 X 中心。

    【讨论】:

    • 当有多种内置方法可以做到时,自己做没有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2020-05-22
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    相关资源
    最近更新 更多