(Python)從零開始,簡單快速學機器仿人視覺Opencv---第十八節:輪廓的性質

1.1長寬比

邊界矩形的寬高比

x,y,w,h=cv2.boundingRect(cnt)
aspect_ratio = float(w)/h

2.Extent

輪廓面積與邊界矩形面積的比

area=cv2.contourArea(cnt)
x,y,w,h=cv2.boundingRect(cnt)
rect_area=w*h
extent=float(area)/rect_area

3.Solidity

輪廓面積與凸包面積的比

area=cv2.contourArea(cnt)
hull=cv2.convexHull(cnt)
hull_area=cv2.contourArea(hull)
solidity=float(area)/hull_area

4.與輪廓面積相等的圓形的直徑

area=cv2.contourArea(cnt)
equi_diameter=np.sqrt(4*area/np.pi)

5.方向

對象的方向,下面的方法還會返回長軸和短軸的長度

(x,y),(MA,ma),angle=cv2.fitEllipse(cnt)

6.掩模和像素點

有時我們需要構成對象的所有像素點

mask=np.zeros(imgray.shate,np.uint8)
#這裏一定要使用參數-1,繪製填充的輪廓
cv2.drawContours(mask,[cnt],0,255,-1)
pixelpoints=np.transpose(np.nonzero(mask))

7.最大值和最小值及它們的位置

可以使用掩模圖像得到這些參數

min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(imgray,mask=mask)

8.平均顏色及平均灰度

同樣使用相同的掩模來求得

mean_val=cv2.mean(im,mask=mask)

9.極點

一個對象最上,最下,最左,和最右的點

leftmost=tuple(cnt[cnt[:,:,0].argmin()[0])
rightmost=tuple(cnt[cnt[:,:,0].argmax()[0])
topmost=tuple(cnt[cnt[:,:,1].argmin()[0])
bottommost=tuple(cnt[cnt[:,:,1].argmax()[0])

總結

(本系列每週不定期更新,謝謝大家支持!)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章