【OpenCV3.3+Python3.6】对象的测量:面积、多边形拟合

31 篇文章 1 订阅
31 篇文章 0 订阅

对象测量


弧长与面积

轮廓发现
计算每个轮廓的弧长与面积,像素单位

多边形拟合

获取轮廓的多边形拟合结果

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Demo.demo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值