目录:

开闭操作的作用

(一)开操作

(二)闭操作

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

(1)提取水平垂直线

(2)消除干扰线

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

开闭操作的作用:

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

 1 import cv2 as cv
2 import numpy as np
3
4 def camp(val1,val2):
5 pv = val1 + val2
6 if pv > 255:
7 return 255
8 if pv < 0:
9 return 0
10 return pv
11
12 def open_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*3
23 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 def close_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 def open_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 def open_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 def open_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

python实现开闭操作的更多相关文章

  1. opencv 双边模糊,膨胀腐蚀 开 闭操作

    #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; int main(int argc, ...

  2. opencv:形态学操作-开闭操作

    #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...

  3. day 27 Python中进程的操作

    进程的创建和结束: multiprocess模块: multiprocess不是一个模块而是python中一个操作.管理进程的包 分为四个部分:创建进程部分,进程同步部分,进程池部分,进程之间数据共享 ...

  4. Python中的字符串操作总结(Python3.6.1版本)

    Python中的字符串操作(Python3.6.1版本) (1)切片操作: str1="hello world!" str1[1:3] <=> 'el'(左闭右开:即是 ...

  5. python实现其它形态学操作

    目录: (一) 顶帽(原图像与开操作图像的差值)(二) 黑帽(原图像与闭操作图像的差值)(三) 形态学梯度  (1)基本梯度(膨胀后的图像与腐蚀后的图像差值)  (2)内部梯度(原图像减去腐蚀后的图像 ...

  6. OpenCV3编程入门笔记(4)腐蚀、膨胀、开闭运算、漫水填充、金字塔、阈值化、霍夫变换

    腐蚀erode.膨胀dilate 腐蚀和膨胀是针对图像中的白色部分(高亮部分)而言的,不是黑色的.除了输入输出图像外,还需传入模板算子element,opencv中有三种可以选择:矩形MORPH_RE ...

  7. [设计模式]<<设计模式之禅>>关于开闭原则

    开闭原则是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的.灵活的系统,先来看开闭原则的定义: Software entities like classes,modules and fun ...

  8. 【设计模式】之开闭原则(OCP)

    开闭原则是面向对象设计的一个重要原则,其定义如下: 开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭.即软件实体应尽量在不修改原有代码的情况下进 ...

  9. 【面向对象设计原则】之开闭原则(OCP)

    开闭原则是面向对象设计的一个重要原则,其定义如下: 开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭.即软件实体应尽量在不修改原有代码的情况下进 ...

随机推荐

  1. 宝塔配置vnc+wine实现Q群机器人

    图形界面必备X Window System yum -y groupinstall "X Window System" 安装epel源 yum -y install epel-re ...

  2. Bert文本分类实践(二):魔改Bert,融合TextCNN的新思路

    写在前面 ​ 文本分类是nlp中一个非常重要的任务,也是非常适合入坑nlp的第一个完整项目.虽然文本分类看似简单,但里面的门道好多好多,博主水平有限,只能将平时用到的方法和trick在此做个记录和分享 ...

  3. cadvisor+prometheus+alertmanager+grafana完成容器化监控告警(一)

    一.概况 1.拓扑图 2.名词解释 Grafana 可视化监控容器运行情况 Prometheus: 开源系统监视和警报工具包 Alertmanager 一个独立的组件,负责接收并处理来自Prometh ...

  4. SphereEx 公司成立,推动 Apache ShardingSphere 社区加速发展

    近日,SphereEx 商业公司在中国红杉种子基金及初心资本助力下,已完成公司及团队组建.各大媒体平台及公众号已相继报道,并抢占新闻头条.作为以 Apache ShardingSphere 核心团队组 ...

  5. 洛谷3203 弹飞绵羊(LCT)

    据说这个题当年的正解是分块qwq 根据题目所说,对于题目中的弹力系数,就相当于一条边,那么对于"跳出去"这个限制,我们可以选择建造一个新点\(n+1\)表示结束,那么每次,求一个点 ...

  6. fastjson及其反序列化分析--TemplatesImpl

    fastjson及其反序列化分析 源码取自 https://www.github.com/ZH3FENG/PoCs-fastjson1241 参考 (23条消息) Json详解以及fastjson使用 ...

  7. Less-25 preg_replace2

    Less-25: 核心语句: 各种回显也均有. 通过blacklist,我们可以发现,本题屏蔽了and和or. preg_replace函数中正则表达式后面的i是一个修饰符,代表正则匹配时不区分大小写 ...

  8. FastAPI 学习之路(五十三)根据环境不同连接不同数据库

    在实际的开发过程中,我们数据库,可以根据连接的环境不一样,我们会拆分成不一样的数据库,根据我们所要用的环境来选择对应的数据库即可,那么我们应该如何去实现根据选择去选择不一样的数据库呢. 首先,我们找一 ...

  9. git常用的一些简单命令

    1.如果一个文件被修改了,但是还没有使用 git add 命令,此时想取消这次修改,需要执行的命令如下: git checkout -- 文件名 2.如果一个文件执行了 git add ,此时想取消这 ...

  10. Noip模拟79 2021.10.17(题目名字一样)

    T1 F 缩点缩成个$DAG$,然后根据每个点的度数计算期望值 1 #include<cstdio> 2 #include<cstring> 3 #include<vec ...