多语言展示
当前在线:1389今日阅读:117今日分享:28

【python入门】基于opencv的分水岭算法

本文,用分水岭算法,来区分下图中的硬币。
工具/原料
1

电脑

2

python

方法/步骤
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+1m[u==255]=0m = cv2.watershed(img,m)cv2.imwrite('result0.png',(m+1)*255)

7

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

推荐信息