Как посчитать мелкие семена на изображении с шумным фономPython

Программы на Python
Anonymous
Как посчитать мелкие семена на изображении с шумным фоном

Сообщение Anonymous »

У меня есть изображение семян томата. Количество семян на изображении 32. Я пытаюсь посчитать эти семена с помощью OpenCV. Изображение имеет некоторый шум, который приводит к неправильному подсчету.
Изображение

Мой подход — подсчитать центры кругов. Общая идея состоит в том, чтобы установить пороговое значение, а затем залить заливку из фонового пикселя для заполнения фона (заливка работает как инструмент «Ведро с краской» в приложениях для редактирования фотографий), таким образом вы видите только центры.
Вот мой код:

Код: Выделить всё

img = cv2.imread('tomato.jpg', 0)
dst = cv2.fastNlMeansDenoisingColored(img,None,10,10,7,21)
img = cv2.cvtColor(dst, cv2.COLOR_BGR2GRAY)
seed_pt = (25, 25)
fill_color = 0
mask = np.zeros_like(img)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
for th in range(60, 120):
prev_mask = mask.copy()
mask = cv2.threshold(img, th, 255, cv2.THRESH_BINARY)[1]
mask = cv2.floodFill(mask, None, seed_pt, fill_color)[1]
mask = cv2.bitwise_or(mask, prev_mask)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)

n_centers = cv2.connectedComponents(mask)[0] - 1
print('There are %d cells in the image.'%n_centers)
Вывод:

В изображении 34 ячейки.

исходное количество — 32.
Как это исправить?>

Подробнее здесь: https://stackoverflow.com/questions/669 ... background

Вернуться в «Python»