opencv 9 輪廓 性質

2021-08-20 03:54:32 字數 1501 閱讀 9616

邊界矩形的寬高比

x,y,w,h =cv2.boundingrect(cnt)

aspect_ratio = float(w)/h

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

area = cv2.contourarea(cnt)

x,y,w,h = cv2.boundingrect(cnt)

rect_area = w*h

extent = float(area)/rect_area

輪廓面積與凸包面積的比

area = cv2.contourarea(cnt)

hull = cv2.convexhull(cnt)

hull_area = cv2.contourarea(hull)

solidity = float(area)/hull_area

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

area = cv2.contourarea(cnt)

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

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

(x,y),(ma,ma),angle =cv2.fitellipse(cnt)
橢圓的中心座標,短軸長軸(也就是2b,2a),旋轉角度

有時我們需要構成物件的所有畫素點,我們可以這樣做

mask = np.zeros(imgray.shape,np.uint8) 

# 這裡一定要使用引數-1, 繪製填充的的輪廓

cv2.drawcontours(mask,[cnt],0,255,-1)

//方法一 bumpy方法

pixelpoints = np.transpose(np.nonzero(mask))

//方法二 opencv方法

#pixelpoints = cv2.findnonzero(mask)

我們可以使用掩模影象得到這些引數

min_val, max_val, min_loc, max_loc =cv2.minmaxloc(imgray,mask = mask)
我們也可以使用相同的掩模求乙個物件的平均顏色或平均灰度

mean_val =cv2.mean(im,mask = mask)
乙個物件最上面,最下面,最左邊,最右邊的點

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

opencv學習 9 輪廓提取

輪廓提取 主要針對二值影象 1 輪廓分為外輪廓和內輪廓 如下圖 外輪廓以c開頭 內輪廓以h開頭 其中img是二值影象,storage是記憶體儲存序列,contours指向儲存的第乙個輪廓,cvmemstorage storage cvcreatememstorage 0 記憶體儲存序列 cvseq ...

opencv學習(四)輪廓識別

本章學習輪廓識別 bbb.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std using namespace cv int tmain size refs size int captrefrnc.get cv cap prop...

openCV簡要 10 輪廓檢測

1.尋找影象中的輪廓 cv2.findcontours img,mode,method mode為輪廓檢索模式 retr external 只檢索最外面的輪廓 retr list 檢索所有輪廓,並把所有輪廓儲存在乙個鍊錶中 retr ccomp 檢索所有輪廓,組織為兩層 第一層是外部邊界,第二層是空...