gpt4 book ai didi

python - OpenCV cv2.moments将所有时刻返回零

转载 作者:行者123 更新时间:2023-12-02 17:20:30 24 4
gpt4 key购买 nike

由于某些我无法理解的原因,打开的cv函数cv2.moments返回一个字典,其中包含我提供的轮廓的所有零值。
这是MWE:

contour = [[[271, 67]],
[[274, 67]],
[[275, 68]],
[[278, 68]],
[[279, 69]],
[[283, 69]],
[[284, 70]],
[[287, 70]],
[[288, 71]],
[[291, 71]],
[[292, 72]],
[[295, 72]],
[[292, 72]],
[[291, 71]],
[[288, 71]],
[[287, 70]],
[[284, 70]],
[[283, 69]],
[[279, 69]],
[[278, 68]],
[[275, 68]],
[[274, 67]]
]

x=np.asarray(x)
moments = cv2.moments(x)

结果:
print(moments)

{'m00': 0.0, 'm10': 0.0, 'm01': 0.0, 'm20': 0.0, 'm11': 0.0, 'm02': 0.0, 'm30': 0.0, 'm21': 0.0, 'm12': 0.0, 'm03': 0.0, 'mu20': 0.0, 'mu11': 0.0, 'mu02': 0.0, 'mu30': 0.0, 'mu21': 0.0, 'mu12': 0.0, 'mu03': 0.0, 'nu20': 0.0, 'nu11': 0.0, 'nu02': 0.0, 'nu30': 0.0, 'nu21': 0.0, 'nu12': 0.0, 'nu03': 0.0}

这种行为是什么意思?
我相信这是因为轮廓是开放的,但我不确定。
是否有一种标准方法可以通过预先检查轮廓是打开还是关闭来摆脱这种现象?

最佳答案

我认为您得到零的原因是因为您的轮廓是开放的,如opencv文档中所述:“轮廓的矩以相同的方式定义,但使用 Green的公式进行计算”

绿色公式:在数学中,格林定理给出了围绕简单闭合曲线C的线积分与以C 为边界的平面区域D 上的双积分之间的关​​系。 (维基)

因此,由于轮廓是开放的,因此不存在由
限定的区域,换句话说,轮廓所限定的区域为零。

为了找到这一点,我们可以使用cv2.contourArea预先计算轮廓内的边界面积。如果面积为零,则轮廓是开放的,无需继续。

为了检查轮廓是否不是自相交的,我不知道使用opencv的简单方法,但是可以使用Shapely

  • Convert the contour from opencv to Shapely
  • 使用is_simple
  • 检查多边形是否自相交

    关于python - OpenCV cv2.moments将所有时刻返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62392240/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com