opencv轮廓周长原理_OpenCV3 - 轮廓特征
矩(Moments)
圖像矩可以幫助你計(jì)算一些特征, 例如對象的質(zhì)心, 對象的面積等等. 具體可參考Image Moments
函數(shù)**cv.moments()**?返回一個所有矩值的字典
import numpy as np
import cv2 as cv
img = cv.imread('star.jpg',0)
ret,thresh = cv.threshold(img,127,255,0)
im2,contours,hierarchy = cv.findContours(thresh, 1, 2)
cnt = contours[0]
M = cv.moments(cnt)
print( M )
通過這些矩值, 你可以計(jì)算出有用的數(shù)據(jù), 例如面積, 質(zhì)心等等. 質(zhì)心可以通過關(guān)系(Cx=M10/M00?and?Cy=M01/M00)來獲得. ?通過如下計(jì)算獲得
cx = int(M['m10']/M['m00'])
cy = int(M['m01']/M['m00'])
輪廓面積
輪廓面積可以通過函數(shù)**cv.contourArea()**獲得, 或者通過M['m00']
area = cv.contourArea(cnt)
輪廓周長
輪廓周長可以使用**cv.arcLength()**?獲得. 第二個參數(shù)指定圖形是否閉環(huán)(如果是則為True), 否則只是一條曲線.
perimeter = cv.arcLength(cnt,True)
輪廓逼近
它逼近一個輪廓形狀到另一個頂點(diǎn)數(shù)目較少的形狀, 這取決于我們指定的精度. 它是Douglas-Peucker algorithm算法的一種實(shí)現(xiàn).
第一個參數(shù)是輪廓
第二個參數(shù)稱為ε, 它是從輪廓到近似輪廓的最大距離.?這是一個準(zhǔn)確的參數(shù)。為了得到正確的輸出, 需要明智地選擇ε。
epsilon = 0.1*cv.arcLength(cnt,True)
approx = cv.approxPolyDP(cnt,epsilon,True)
如下的第二張圖是ε設(shè)定為10%的結(jié)果, 第三張圖是ε設(shè)定為1%的結(jié)果.
邊框
直邊界矩形
x,y,w,h = cv.boundingRect(cnt)
cv.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
旋轉(zhuǎn)矩形
rect = cv.minAreaRect(cnt)
box = cv.boxPoints(rect)
box = np.int0(box)
cv.drawContours(img,[box],0,(0,0,255),2)
綠框是直邊界矩形, 紅框是旋轉(zhuǎn)矩形
參考文件
總結(jié)
以上是生活随笔為你收集整理的opencv轮廓周长原理_OpenCV3 - 轮廓特征的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vivado 验证ddr引脚_vivad
- 下一篇: delphi query 存储为dbf_