理论:

图像的矩
零阶矩

这里的图像是单通道图像, V(i,j)V(i,j)表示图像在 (i,j)(i,j)点上的灰度值。
我们可以发现,当图像为二值图时, M00就是这个图像上白色区域的总和,因此, M00可以用来求二值图像(轮廓,连通域)的面积
一阶矩

当图像为二值图时, V(i,j) 只有0(黑),1(白)两个值。 M10 就是图像上所以白色区域 x坐标值与坐标乘积的累加。因此,一阶矩可以用来求二值图像的重心:

二阶矩

二阶矩可以用来求物体形状的方向:


##代码
Mat image = imread(imagename, 0);//读入灰度图
Mat binary;
//二值,椭圆是黑色的,所以反色下
threshold(image, binary, 200, 255, CV_THRESH_BINARY_INV);
Moments m = moments(binary, true);//moments()函数计算出三阶及一下的矩
Point2d center(m.m10 / m.m00, m.m01 / m.m00);//此为重心
//计算方向
double a = m.m20 / m.m00 - center.xcenter.x;
double b = m.m11 / m.m00 - center.xcenter.y;
double c = m.m02 / m.m00 - center.ycenter.y;
double theta = fastAtan2(2b,(a - c))/2;//此为形状的方向
文章介绍了如何使用图像的矩来分析二值图像的特性,如通过零阶矩计算白色区域面积,一阶矩确定图像重心,以及二阶矩估算物体形状的方向。通过OpenCV库中的moments函数,可以便捷地计算这些矩并应用到实际问题中。

2万+

被折叠的 条评论
为什么被折叠?



