Я работал с изображением бактерий и хотел взять количество бактерий из изображения, а также мне нужно классифицировать бактерии по определенной форме и размеру. Я использую 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 ниже:
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
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)
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.