2015-10-14 61 views
3

我正在尋找一種簡單而優雅的方式來計算每個blob中的白色像素。比如我有畫面是這樣的:如何計算opencv中每個blob中的白色像素?

black and white image

代碼:

cv2.findContours(mat.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) 
areas = [(lambda c: cv2.moments(c)['m00'])(c) for c in contours] 

返回[255.0,482.5,6480.5,6230.0,15531.0,19810.0],但我想剛纔3值有3個獨立的斑點。

+0

你想每個blob的區域?是什麼讓你覺得只有三個斑點?兩個或更多的像素一起被認爲是一個blob! – Arjun

+0

@Arjun什麼?這裏有3個白色的斑點。 – Miki

+0

@ dragon7你提出了一個基於'connectedComponentsWithStats'的解決方案。如果有效,你可以用代碼示例做出新答案,並將其標記爲答案? – Miki

回答

2

最好的選擇似乎是從OpenCV 3.0使用connectedComponentsWithStats

實施例:

# find all blobs and label them 
n, labels, stats, _ = cv2.connectedComponentsWithStats(mat) 
  • Ñ - 不同的斑點的數目
  • 標籤 - 矩陣狀的墊材相同的形狀和包含每個點標籤
  • 統計 - 按以下順序對每個斑點進行統計:
    • CC_STAT_LEFT最左邊的(x)座標,它是水平方向上邊界框的包含開始。
    • CC_STAT_TOP最上面的(y)座標,它是垂直方向上邊界框的包含開始。
    • CC_STAT_WIDTH邊界框的水平大小
    • CC_STAT_HEIGHT所連接的組件的包圍盒
    • CC_STAT_AREA總面積(以像素爲單位)的垂直尺寸

所以如果想要知道給定blob中有多少像素,只需檢查等於標籤和第五列的行。

相關問題