python closed_python实现开闭操作

目录:

开闭操作的作用

(一)开操作

(二)闭操作

(三)开操作完成其他任务

(1)提取水平垂直线

(2)消除干扰线

(3)提取满足要求的形状

开闭操作的作用:

(一)开操作(特点作用:消除噪点-----去除小的干扰块,而不影响原来的图像。先腐蚀后膨胀)

1 importcv2 as cv2 importnumpy as np3

4 defcamp(val1,val2):5 pv = val1 +val26 if pv > 255:7 return 255

8 if pv <0:9 return010 returnpv11

12 defopen_demo(image):13 gray =cv.cvtColor(image,cv.COLOR_BGR2GRAY)14 for i in range(1000):  #为灰度图像加一些噪点

15 h = np.random.random_integers(0,gray.shape[0]-1)16 w = np.random.random_integers(0, gray.shape[1]-1)17 val = np.random.random_integers(0, 255)18 gray[h,w] =camp(gray[h,w],val)19

20 ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)  #生成二值化图像

21 cv.imshow("binary",binary)22 kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))#结构元素,矩形大小3*323 binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)  #支持形态学的函数,此参数为开操作,先腐蚀后膨胀,会消除一些为1的白色噪点

24 cv.imshow("open_demo",binary)25

26

27 src = cv.imread("./o.png") #读取图片

28 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应

29 cv.imshow("input image",src) #通过名字将图像和窗口联系

30

31 open_demo(src)32

33 cv.waitKey(0) #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作

34 cv.destroyAllWindows() #销毁所有窗口

(二)闭操作(特点:可以填充闭合区域。先膨胀后腐蚀)

1 defclose_demo(image):2 gray =cv.cvtColor(image,cv.COLOR_BGR2GRAY)3 ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)4 cv.imshow("binary",binary)5 kernel = cv.getStructuringElement(cv.MORPH_RECT,(15,15))6 binary =cv.morphologyEx(binary,cv.MORPH_CLOSE,kernel)7 cv.imshow("close_demo",binary)8

9

10 src = cv.imread("./o.png") #读取图片

11 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应

12 cv.imshow("input image",src) #通过名字将图像和窗口联系

(三)开操作完成其他任务

(1)提取水平垂直线

1 defopen_demo(image):2 gray =cv.cvtColor(image,cv.COLOR_BGR2GRAY)3 ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)4 cv.imshow("binary",binary)5 kernel = cv.getStructuringElement(cv.MORPH_RECT,(1,15))  #修改内核为(15,1)可以提起横线,水平-竖直。

6 binary =cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)7 cv.imshow("open_demo",binary)

原理:

1 kernel = cv.getStructuringElement(cv.MORPH_RECT,(1,15))

(2)消除干扰线

1 defopen_demo(image):2 gray =cv.cvtColor(image,cv.COLOR_BGR2GRAY)3 ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)4 cv.imshow("binary",binary)5 kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))  #因为干扰线很细,小于我们想要的字母,先腐蚀后膨胀对字母无影响,但是对于细线在腐蚀的时候就处理掉了

6 binary =cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)7 cv.imshow("open_demo",binary)

(3)提取满足要求的形状

getStructuringElement我们设置的内核形状为矩形,是可以设置其他形状

矩形:MORPH_RECT;

交叉形:MORPH_CORSS;

椭圆形:MORPH_ELLIPSE;

1 defopen_demo(image):2 gray =cv.cvtColor(image,cv.COLOR_BGR2GRAY)3 ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)4 cv.imshow("binary",binary)5 kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE,(5,5))6 binary =cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)7 cv.imshow("open_demo",binary)

参考:

https://www.cnblogs.com/ssyfj/p/9277688.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值