使用此答案创建分段程序,它会错误地计算对象.我注意到单独的物体被忽略或者成像采集不佳.
我计算了123个对象,程序返回117,如下所示.用红色圈出的物体似乎丢失了:
使用720p网络摄像头中的以下图像:
import cv2
import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import label
import urllib.request
# https://stackoverflow.com/a/14617359/7690982
def segment_on_dt(a, img):
border = cv2.dilate(img, None, iterations=5)
border = border - cv2.erode(border, None)
dt = cv2.distanceTransform(img, cv2.DIST_L2, 3)
plt.imshow(dt)
plt.show()
dt = ((dt - dt.min()) / (dt.max() - dt.min()) * 255).astype(np.uint8)
_, dt = cv2.threshold(dt, 140, 255, cv2.THRESH_BINARY)
lbl, ncc = label(dt)
lbl = lbl * (255 / (ncc + 1))
# Completing the …Run Code Online (Sandbox Code Playgroud)