计算轮廓/面积的中心

4
2个回答

10
您可以通过计算来获得y方向的质心。然后,质心由公式yc = M01 / M00给出,其中M01和M00是Moments调用返回的结构中的字段。
如果您只想要边界矩形的中心点,那么也很容易使用BoundingRect来实现。这将返回一个CvRect,您只需要取高度的一半即可。
如果这不够准确,请告诉我,我可以为您找到示例代码。

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

-2

我不太清楚OpenCV是什么,但我建议这样做:

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

相同的算法也可以用于X中心。


当有多种内置的方法可以完成任务时,自己动手做就没有意义了。 - Kiv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接