То, что вы ищете, это 30 капель, а не пикселей. Использовать Hough Circles приятно и просто.
import cv2
import numpy as np
import matplotlib.pyplot as plt
# load image
img = plt.imread('VhX5o.jpg')
# convert image to gray
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# median blur
gray = cv2.medianBlur(gray, 5)
# Detect circles
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1.2, 10,
param1=200,
param2=30,
minRadius=0,
maxRadius=0)
print(len(circles)) # 30
circles = np.uint16(np.around(circles))
# filtered image returns just the (blue) nucleus blobs
filt_img = np.zeros(img.shape)
for i in circles[0,:]:
cv2.circle(filt_img,(i[0],i[1]),2,(0,0,255), 3)
cv2.circle(img,(i[0],i[1]),2,(0,0,255), 3)
# plot filt_img
plt.figure()
plt.imshow(filt_img)
# plot with circles drawn over original image
plt.imshow(img)
Вы можете использовать положения окружностей в качестве центроидов для каждого из ядер.
Надеюсь, это поможет!
Для будущих случаев я бы также рекомендовал scipy.ndimage.measurements.label () для обнаружения больших двоичных объектов.
Обнаруженные BLOB-объекты накладываются на исходное изображение
Если бы кто-нибудь мог порекомендовать мне, как загрузить оба изображения как часть этого поста, это было бы здорово!