2016-03-31 23 views
0

我一直在細菌的圖像下工作,希望從圖像中獲取細菌的數量,並且還需要對具有特定形狀和大小的細菌進行分類。 我正在使用opencv python。現在我使用輪廓方法。len(輪廓)是什麼意思?

contours,hierarchy = cv2.findContours(dst,1,2) 
    cnt = contours[0] 
    l = len(contours) 
    print l 
    li = list(contours) 
    print li 

這給出了l = 115和li =某些數組值的輸出。 這是什麼意思?

請幫我在下面找出answer..e.coli圖像:

enter image description here

回答

0

cv2.findCountours返回輪廓的一個列表,其中每個輪廓是一個點的numpy的陣列(2列X, y座標)。 len(foo)是列表foo的長度。所以在你的情況下,它發現了115個輪廓,你的li只是contours列表的一個副本。

您可以使用drawContours function輕鬆檢查輪廓。

# draws contours in white color, outlines only (not filled) 
cv2.drawContours(dst, contours, -1, (255,)) 

cv2.imshow("result", dst) 
cv2.waitKey(-1) 
+0

感謝您的回覆 – meera

2

輪廓連接連續的點,並把它們放在一個數組中。因此,此陣列中的每個元素可能對應於不同的細菌(或由於連接的顏色組是陰影等而導致錯誤檢測)。

當你說len(contours)時,你會得到這個數組中的元素個數。因此,您可以粗略估計細菌的數量。

就你而言,有115種細菌,或與周圍環境不同的顏色,可能是也可能不是細菌。當你爲它們定義一個列表並打印列表時,你會得到這個列表中每個元素的屬性,因此你可以得到每個「連接點組」或每個「可能是細菌的對象」的屬性。它的確很簡單。

如果你知道你有很多錯誤的檢測這裏是你怎麼做:

  • A組出現菌爲一體:

    您閾值圖像(將其轉換爲黑色&白色)並首先使用erode函數。然後使用dilate函數刪除它們的連接。然後再與findContours一起去。檢測爲菌

  • 漬:

    讓你的閾值僅覆蓋菌色彩範圍,所以一切都將被忽略。

見下文來源,他們可能會有所幫助:

http://docs.opencv.org/2.4/doc/tutorials/imgproc/shapedescriptors/find_contours/find_contours.html

http://docs.opencv.org/trunk/d4/d73/tutorial_py_contours_begin.html#gsc.tab=0

+0

謝謝你的回覆 – meera