Я работал с изображением бактерий и хотел взять количество бактерий из изображения, а также мне нужно классифицировать бактерии по определенной форме и размеру. Я использую opencv python. Сейчас использую контурный метод.

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

Это дает на выходе l = 115 и li = некоторые значения массива. Что это значит ??

Пожалуйста, помогите мне найти ответ ... изображение e.coli ниже:

enter image description here

0
meera 31 Мар 2016 в 13:57

2 ответа

Contours соединяет непрерывные точки и объединяет их в массив. Таким образом, каждый элемент в этом массиве, вероятно, соответствует разным бактериям (или ложному обнаружению из-за связанной цветовой группы, которая является тенью и т. Д.).

Когда вы говорите len(contours), вы получаете количество элементов в этом массиве. Таким образом, вы получаете приблизительную оценку количества бактерий.

В вашем случае есть 115 бактерий или цветов, которые отличаются от окружающей их среды, которые могут быть или не быть бактериями. Когда вы определяете для них список и распечатываете его, вы получаете свойства каждого элемента в этом списке, поэтому вы получаете свойства для каждой «группы связанных точек» или каждого «объекта, который, возможно, является бактериями». На самом деле все довольно просто.

Если вы понимаете, что у вас много ложных срабатываний, вот что вы делаете:

  • Группа бактерий, представляющая собой единое целое:

    Вы устанавливаете порог изображения (конвертируете его в черно-белое) и сначала используете функцию 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

3
Community 20 Июн 2020 в 12:12

cv2.findCountours возвращает список контуров, каждый из которых представляет собой массив точек (2 столбца для координат x, y). len(foo) - длина списка foo. Итак, в вашем случае было найдено 115 контуров, а ваш li - это просто копия списка contours.

Вы можете легко изучить контуры, используя drawContours функция.

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

cv2.imshow("result", dst)
cv2.waitKey(-1)
0
szym 31 Мар 2016 в 14:01