tft每日頭條

 > 生活

 > pythonopencv包有多大

pythonopencv包有多大

生活 更新时间:2024-12-26 20:36:25
目标

在這裡,我們将學習提取一些常用的物體屬性,如堅實度,等效直徑,掩模圖像,平均強度等。更多的功能可以在matlab regionprops文檔中找到。

(注:質心、面積、周長等也屬于這一類,但我們在上一章已經見過)

1. 長寬比

它是對象邊界矩形的寬度與高度的比值。


pythonopencv包有多大(OpenCV-Python輪廓屬性)1


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

2. 範圍

範圍是輪廓區域與邊界矩形區域的比值。


pythonopencv包有多大(OpenCV-Python輪廓屬性)2


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

3. 堅實度

堅實度是等高線面積與其凸包面積之比。


pythonopencv包有多大(OpenCV-Python輪廓屬性)3


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

4. 等效直徑

等效直徑是面積與輪廓面積相同的圓的直徑。


pythonopencv包有多大(OpenCV-Python輪廓屬性)4


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

例如,如果我将其應用于印度地圖,則會得到以下結果:

pythonopencv包有多大(OpenCV-Python輪廓屬性)5

練習
  1. matlab的regionprops doc中仍然有一些特性。試着去實現它們。
,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved