对象测量主要包括一些:弧长与面积,图像中的多边形拟合,几何矩计算等。下面了解其API的使用方式。
弧长与面积:
步骤:轮廓发现完成,计算每个轮廓的弧长与面积,单位为像素。
### 18,几何对象测量
import cv2 as cv
import numpy as np
def image_Measure(image):
#防止随机噪声影响效果,首先对原图高斯滤波
dst=cv.GaussianBlur(image,(3,3),0)
#将原图像转换为灰度图像
gray=cv.cvtColor(dst,cv.COLOR_BGR2GRAY)
#图像利用阈值化进行二值化,
#注意后面这个二值化cv.THRESH_OTSU方法,如果选三角方式,后面求外接矩形可能会出现除零错误。
ret,binary=cv.threshold(gray,0,255,cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
cv.imshow("Binary_image",binary)
#在二值化图像的基础上进行寻找轮廓
cloneImage,contours,heriachy=cv.findContours(binary,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE)
#循环打印出所有的轮廓
for i ,contour in enumerate(contours):
#将轮廓结果进行测量
area=cv.contourArea(contour)
x,y,w,h=cv.boundingRect(contour)
#得到轮廓的外接矩形,返回一个字典
mm=cv.moments(contour)
type(mm)
#得到外接矩形中心位置
cx=mm['m10']/mm['m00']
cy=mm['m01']/mm['m00']
#对测量结果绘制
#绘制圆心
cv.circle(image,(np.int(cx),np.int(cy)),3,(0,0,255),-1)
#绘制矩形
cv.rectangle(image,(x,y),(x+w,y+h),(255,0,0),2)
#打印出面积大小
print("矩形面积为:",area)
#显示绘制测量结果
cv.imshow("measure_demo",image)
src = cv.imread(r'F:\OutputResult\SrcImage\digits1.jpg')
cv.namedWindow("src",0)
cv.imshow("src",src)
image_Measure(src)
cv.waitKey(0)
cv.destroyAllWindows()
函数:
cv.contourArea(contour[, oriented])求外接矩形面积:
cv.boundingRect(points)求边界矩形的点:
cv.circle(img, center, radius, color[, thickness[, lineType[, shift]]])
cv.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
输出为:
矩形面积为: 742.0 矩形面积为: 1806.0 矩形面积为: 1799.0 矩形面积为: 1166.5 矩形面积为: 3951.5 矩形面积为: 1997.0 矩形面积为: 2151.0 矩形面积为: 7069.5
图像结果为: