opencv-轮廓面积和中心点的计算(python)

1.矩

矩本来是个统计学概念,定义为f(x)*P(x)关于x的定积分,在二值化图形中,其零阶矩的定义如下:

在这里插入图片描述
V(i,j)是(i,j)点的灰度值,这个定义的本意是,所有像素的灰度值的总和,但因为在二值化图形中,白色都为1,黑色都为0,所以M00的结果是所有白色区域的像素值的和,也可以当作白色区域的面积使用。

其一阶矩定义如下:

opencv-轮廓面积和中心点的计算(python)_第1张图片

i,j分别是每个像素的x,y坐标,这个定义本质所有像素点的x,y坐标分别和像素值相乘的积,然后求和得到的,同样M10的结果就是所有白色区域像素的x坐标的和,M01是所有白色区域y坐标的和。

利用一阶矩,我们可以求出图形的重心坐标,其公式为:

opencv-轮廓面积和中心点的计算(python)_第2张图片

2、求面积和重心
如上面所示,利用矩可以求出图形的面积和重心

opencv提供cv2.moments(轮廓)来求出图形的矩,这个函数只要提供Contours参数就可以。

例子:

M= cv2.moments(contours[0]) #求矩

cx = int(M[‘m10’]/M[‘m00’]) # 求x坐标

cy = int(M[‘m01’]/M[‘m00’]) # 求y坐标

img=cv2.circle(img ,(cx,cy),2,(0,0,255),4) #画出重心

屏幕剪辑的捕获时间:2018/4/15 21:19

对于面积,本来图形的矩里面M00就是表示面积,但opencv同时也提供cv2.ContourArea(轮廓)

来计算面积,两者并没有什么区别

例子:

area = cv2.contourArea(contours[0])
print “area = %f”%area
print “M00 = %f”%M[“m00”]

注:cv2.moments这个函数返回的结果是一个字典类型的数据,零阶矩的键值是m00,一阶矩的键值分别是m10和m01

你可能感兴趣的:(opencv)