OpenCV輪廓特性

2021-08-22 19:26:52 字數 1699 閱讀 4438

在這裡,我們將學習提取一些常用的性質的物體,如固體,等效直徑,面具影象,平均強度等。

它是物體的寬度與高度的比值。

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)
在某些情況下,我們可能需要含該物件的所有點。可以這樣做:

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

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

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

#pixelpoints = cv2.findnonzero(mask)

我們可以使用掩碼影象找到這些引數。

min_val, max_val, min_loc, max_loc = cv2.minmaxloc(imgray,mask = mask)
8.平均顏色或平均強度

在這裡,我們可以找到乙個物體的平均顏色。也可以是灰度模式下物體的平均強度。我們再次用同樣的面具來做這件事。

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輪廓特性(二)

1 輪廓的多邊形逼近 const void src seq,int header size,cvmemstorage storage,int method,method的取值上篇博文中介紹了 double parameter,表示逼近的精度 intrecursive 0 指定是否針對全部的輪廓,取0...

opencv 輪廓描述

上午主要學習了鏈碼的有關知識,鏈碼是一種表示方法,是用於表示有順序連線的具有指定長度了方向的直線段組成的邊界線,典型的情況下,這種表示方法基於4或8連線,經常選用更大間隔的網格對邊界進行重取樣,邊界的鏈碼取決於初始點,然而,此編碼可以通過簡單的過程實現初始點的歸一化,將鏈碼看成是方向編號的迴圈序列,...

opencv 輪廓應用

typedef struct cvseq cvseq define cv contour fields cv sequence fields cvrect rect int color int reserved 3 typedef struct cvcontour cvcontour 則 cvcon...