在這裡,我們将學習提取一些常用的物體屬性,如堅實度,等效直徑,掩模圖像,平均強度等。更多的功能可以在matlab regionprops文檔中找到。
(注:質心、面積、周長等也屬于這一類,但我們在上一章已經見過)
1. 長寬比它是對象邊界矩形的寬度與高度的比值。
x,y,w,h = cv.boundingRect(cnt)
aspect_ratio = float(w)/h
範圍是輪廓區域與邊界矩形區域的比值。
area = cv.contourArea(cnt)
x,y,w,h = cv.boundingRect(cnt)
rect_area = w*h
extent = float(area)/rect_area
堅實度是等高線面積與其凸包面積之比。
area = cv.contourArea(cnt)
hull = cv.convexHull(cnt)
hull_area = cv.contourArea(hull)
solidity = float(area)/hull_area
等效直徑是面積與輪廓面積相同的圓的直徑。
area = cv.contourArea(cnt)
equi_diameter = np.sqrt(4*area/np.pi)
取向是物體指向的角度。以下方法還給出了主軸和副軸的長度。
(x,y),(MA,ma),angle = cv.fitEllipse(cnt)
在某些情況下,我們可能需要構成該對象的所有點。可以按照以下步驟完成:
mask = np.zeros(imgray.shape,np.uint8)
cv.drawContours(mask,[cnt],0,255,-1)
pixelpoints = np.transpose(np.nonzero(mask))
#pixelpoints = cv.findNonZero(mask)
這裡提供了兩個方法,一個使用Numpy函數,另一個使用OpenCV函數(最後的注釋行)。結果也是一樣的,隻是略有不同。Numpy給出的坐标是(行、列)格式,而OpenCV給出的坐标是(x,y)格式。所以基本上答案是可以互換的。注意,row = x, column = y。
7. 最大值,最小值和它們的位置我們可以使用掩碼圖像找到這些參數。
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(imgray,mask = mask)
在這裡,我們可以找到對象的平均顔色。或者可以是灰度模式下物體的平均強度。我們再次使用相同的掩碼進行此操作。
mean_val = cv.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])
例如,如果我将其應用于印度地圖,則會得到以下結果:
練習
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!