文章目录
- 轮廓面积和中心点的计算(python-opencv)
- 1、矩的概念
- 2、求面积和重心
轮廓面积和中心点的计算(python-opencv)
1、矩的概念
矩本来是个统计学概念,定义为f(x)*P(x)关于x的定积分,在二值化图形中,其零阶矩的定义如下:
V(i,j)是(i,j)点的灰度值,这个定义的本意是,所有像素的灰度值的总和,但因为在二值化图形中,白色都为1,黑色都为0,所以M00的结果是所有白色区域的像素值的和,也可以当作白色区域的面积使用。
其一阶矩定义如下:
i,j分别是每个像素的x,y坐标,这个定义本质所有像素点的x,y坐标分别和像素值相乘的积,然后求和得到的,同样M10的结果就是所有白色区域像素的x坐标的和,M01是所有白色区域y坐标的和。
利用一阶矩,我们可以求出图形的重心坐标,其公式为:
2、求面积和重心
如上面所示,利用矩可以求出图形的面积和重心
opencv提供cv2.moments
(轮廓)来求出图形的矩,这个函数只要提供Contours参数就可以。
例子:
M= cv2.moments(contours[0])
cx = int(M['m10']/M['m00'])
cy = int(M['m01']/M['m00'])
img=cv2.circle(img ,(cx,cy),2,(0,0,255),4)
对于面积,本来图形的矩里面M00就是表示面积,但opencv同时也提供cv2.ContourArea
(轮廓)
来计算面积,两者并没有什么区别
例子:
area = cv2.contourArea(contours[0])
print "area = %f"%area
print "M00 = %f"%M["m00"]
注:cv2.moments
这个函数返回的结果是一个字典类型的数据,零阶矩的键值是m00,一阶矩的键值分别是m10和m01
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)