1、由于图像背景颜色比较简单,所以可以直接二进制处理:
img=cv2.imread(r'0.jpg')
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,t=cv2.threshold(gray,0,255,
cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)

2、进行开处理:
kernel=np.ones((3,3),np.uint8)
a=cv2.morphologyEx(t,cv2.MORPH_OPEN,kernel,iterations=2)
3、进行膨胀处理:
b=cv2.dilate(a,kernel,iterations=3)

4、进行距离变换:
d=cv2.distanceTransform(a,cv2.DIST_L2 ,5)
ret,f=cv2.threshold(d,0.7*d.max(),255,0)

5、f=np.uint8(f)
u=b-f
这是图像相减的结果。

6、用分水岭算法制作掩膜:
ret,m=cv2.connectedComponents(f)
m=m+1
m[u==255]=0
m = cv2.watershed(img,m)
cv2.imwrite('result0.png',(m+1)*255)

7、在原图中,用掩膜区分硬币。
img[m == -1] = [0,255,0]
