了解opencv中的Moments函数

Posted

技术标签:

【中文标题】了解opencv中的Moments函数【英文标题】:Understanding Moments function in opencv 【发布时间】:2014-03-18 05:14:13 【问题描述】:

在 OpenCV 中使用矩求中心坐标时,使用

Point(moment[i].m10/moment[i].m00,moment[i].m01/moment[i].m00);

有人可以向我解释一下吗?“m10”、“m00”、“m01”和“m00”是什么意思??

【问题讨论】:

时刻是如何定义的? 你要这个:Moments moment(InputArray array, bool binaryImage=false) ? 【参考方案1】:

图像处理中矩的定义是从物理学中借来的。假设图像中每个像素的权重等于其强度。那么你定义的点就是图像的质心(a.k.a. center of mass)。

假设 I(x,y) 是图像中像素 (x,y) 的强度。那么 m(i,j) 是所有可能的 x 和 y 的和:I(x,y) * (x^i) * (y^j)。

Here 你可以阅读 OpenCV 中使用的时刻的文档。它们被称为原始时刻。

而here 你可以阅读关于各种图像矩(原始矩、中心矩、尺度/旋转不变矩等)的 wiki 文章。很不错,推荐阅读。

【讨论】:

感谢@Michael,但我仍然对此感到困惑。 m(i,j) 你的意思是上面的 m10,m00 等等。但是为什么它必须除以 m00?为什么这个 I(x,y) * (x^i) * (y^j)?跨度> 质心是像素的加权平均值(其中每个权重是强度)。某物的加权平均值是:权重(i)*item(i)的总和除以权重(i)的总和。在图像权重总和相等的情况下,灰度总和等于 m00。 您写道,“假设图像中的每个像素的权重等于其强度”。从 Wikipedia 链接来看,“图像时刻是图像像素的 强度 的某个特定加权平均值(时刻)”。这里的强度是指color intensity(与“颜色饱和度”相同)吗?提前谢谢你。 @Solace,我说的是单色图像,而不是彩色图像。每个像素只有一个值——它的强度(权重)。函数 Moments() 需要一个单通道图像。如果您使用的是彩色图像,您可以通过多种不同的方式将其转换为单通道图像。 在获得所有 m00、m01 后如何获得轮廓的面积。等等?

以上是关于了解opencv中的Moments函数的主要内容,如果未能解决你的问题,请参考以下文章

图像的距

opencv 9 -- 轮廓 特征 一

opencv 9 -- 轮廓 特征 一

cv::Moments 的 OpenCV C++ 用法

图像轮廓之形状匹配

使用 r,我如何将不是基本聚合函数的函数 (moments::skewness) 应用于分组表?