
Мой подход — подсчитать центры кругов. Общая идея состоит в том, чтобы установить пороговое значение, а затем залить заливку из фонового пикселя для заполнения фона (заливка работает как инструмент «Ведро с краской» в приложениях для редактирования фотографий), таким образом вы видите только центры.
Вот мой код:
Код: Выделить всё
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