【Opencv3+Python3入门(18)几何对象测量】

版权声明:本文为博主原创文章,转载时须注明出处 https://blog.csdn.net/KID_yuan/article/details/89575335

对象测量主要包括一些:弧长与面积,图像中的多边形拟合,几何矩计算等。下面了解其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]]])

  • 绘制一个矩形轮廓或一个填充矩形,该矩形的两个对角是pt1和pt2。

输出为:

矩形面积为: 742.0
矩形面积为: 1806.0
矩形面积为: 1799.0
矩形面积为: 1166.5
矩形面积为: 3951.5
矩形面积为: 1997.0
矩形面积为: 2151.0
矩形面积为: 7069.5

图像结果为:

猜你喜欢

转载自blog.csdn.net/KID_yuan/article/details/89575335