对象测量
弧长与面积
轮廓发现
计算每个轮廓的弧长与面积,像素单位
多边形拟合
获取轮廓的多边形拟合结果
approxPolyDP 多边拟合函数
#contour
#epsilon越小越折线越逼近真实形状
#close 是否为闭合区域
几何矩计算
原点矩
中心矩
图像的重心坐标
#对象测量
#弧长与面积
#轮廓发现
#计算每个轮廓的弧长与面积,像素单位
#多边形拟合
#获取轮廓的多边形拟合结果
#approxPolyDP 多边拟合函数
#contour
#epsilon越小越折线越逼近真实形状
#close 是否为闭合区域
#几何矩计算
#原点矩
#中心矩
#图像的重心坐标
#相关API代码演示:使用几何矩计算图像的中心
import cv2
import numpy as np
def measure_object(image):
gray=cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, binary=cv2.threshold(gray, 0,255, cv2.THRESH_BINARY)
print("threshold value: %s"%ret)
cv2.imshow("binary_image",binary)
dst=cv2.cvtColor(binary,cv2.COLOR_GRAY2BGR)
contours,hireachy=cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for i,contour in enumerate(contours):
area=cv2.contourArea(contour)#面积
x,y,w,h=cv2.boundingRect(contour)#外接矩形
rate=min(w,h)/max(w,h)
print("rectangle rate is %s"%rate)
print("AREA IS %s"%area)
mm=cv2.moments(contour)#几何矩
cx=mm['m10']/mm['m00']
cy=mm['m01']/mm['m00'] #得到中心位置
cv2.circle(image, (np.int(cx), np.int(cy)), 3, (0,255,255), -1)
cv2.rectangle(image, (x,y),(x+w,y+h),(0,0,255),2)
approxCurve=cv2.approxPolyDP(contour, 3, True)
print(approxCurve.shape)
if approxCurve.shape[0]>6:
cv2.drawContours(dst, contours, i, (0,255,0), 2)
if approxCurve.shape[0]==4:
cv2.drawContours(dst, contours, i, (0,0,255), 2)
cv2.imshow("measure_object",dst)
print("--------hello world--------")
src=cv2.imread("detect_blob.png")
cv2.imshow("source_image",src)
measure_object(src)
cv2.waitKey(0)
cv2.destroyAllWindows()