【python入门】基于opencv的分水岭算法
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]

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