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

2025-10-14 08:08:42

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)

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

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)

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

4、进行距离变换:

d=cv2.distanceTransform(a,cv2.DIST_L2 ,5)

ret,f=cv2.threshold(d,0.7*d.max(),255,0)

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

5、f=np.uint8(f)

u=b-f

这是图像相趴糟霜减的结果。

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

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)

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

7、在原图中,矿辞用掩膜区分科称硬币。

img[m == -1] = [0,255,0]

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

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢