图像处理之轮廓属性
學習提取一些常用的物體屬性,如堅實度,等效直徑,掩模圖像,平均強度等。
(注:質心、面積、周長等也屬于這一類,但我們在上一章已經見過)
1. 長寬比
它是對象邊界矩形的寬度與高度的比值。
AspectRatio=WidthHeightAspect \; Ratio = \frac{Width}{Height} AspectRatio=HeightWidth?
x,y,w,h = cv.boundingRect(cnt) aspect_ratio = float(w)/h2. 范圍
范圍是輪廓區域與邊界矩形區域的比值。
Extent=ObjectAreaBoundingRectangleAreaExtent = \frac{Object \; Area}{Bounding \; Rectangle \; Area} Extent=BoundingRectangleAreaObjectArea?
area = cv.contourArea(cnt) x,y,w,h = cv.boundingRect(cnt) rect_area = w*h extent = float(area)/rect_area3. 堅實度
堅實度是等高線面積與其凸包面積之比。
Solidity=ContourAreaConvexHullAreaSolidity = \frac{Contour \; Area}{Convex \; Hull \; Area} Solidity=ConvexHullAreaContourArea?
area = cv.contourArea(cnt) hull = cv.convexHull(cnt) hull_area = cv.contourArea(hull) solidity = float(area)/hull_area4. 等效直徑
等效直徑是面積與輪廓面積相同的圓的直徑。
EquivalentDiameter=4×ContourAreaπEquivalent \; Diameter = \sqrt{\frac{4 \times Contour \; Area}{\pi}} EquivalentDiameter=π4×ContourArea??
area = cv.contourArea(cnt) equi_diameter = np.sqrt(4*area/np.pi)5. 取向
取向是物體指向的角度。以下方法還給出了主軸和副軸的長度。
(x,y),(MA,ma),angle = cv.fitEllipse(cnt)6. 掩碼和像素點
在某些情況下,我們可能需要構成該對象的所有點。可以按照以下步驟完成:
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)8. 平均顏色或平均強度
在這里,我們可以找到對象的平均顏色。或者可以是灰度模式下物體的平均強度。我們再次使用相同的掩碼進行此操作。
mean_val = cv.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])例如,如果我將其應用于印度地圖,則會得到以下結果:
總結
- 上一篇: Aprior算法简化算法——FP-Tre
- 下一篇: SQLite | Select 语句