一:开操作(先腐蚀后膨胀)

特点:消除噪点,去除小的干扰块,而不影响原来的图像

import cv2 as cv
import numpy as np def camp(val1,val2):
pv = val1 + val2
if pv > :
return
if pv < :
return
return pv def open_demo(image):
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
for i in range():  #为灰度图像加一些噪点
h = np.random.random_integers(,gray.shape[]-)
w = np.random.random_integers(, gray.shape[]-)
val = np.random.random_integers(, )
gray[h,w] = camp(gray[h,w],val) ret,binary = cv.threshold(gray,,,cv.THRESH_BINARY|cv.THRESH_OTSU)  #生成二值化图像
cv.imshow("binary",binary)
kernel = cv.getStructuringElement(cv.MORPH_RECT,(,))
binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)  #开操作,先腐蚀后膨胀,会消除一些为1的白色噪点
cv.imshow("open_demo",binary) src = cv.imread("./o.png") #读取图片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应
cv.imshow("input image",src) #通过名字将图像和窗口联系 open_demo(src) cv.waitKey() #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows() #销毁所有窗口

二:闭操作(先膨胀后腐蚀)

特点:可以填充闭合区域

def close_demo(image):
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
ret,binary = cv.threshold(gray,,,cv.THRESH_BINARY|cv.THRESH_OTSU)
cv.imshow("binary",binary)
kernel = cv.getStructuringElement(cv.MORPH_RECT,(,))
binary = cv.morphologyEx(binary,cv.MORPH_CLOSE,kernel)
cv.imshow("close_demo",binary) src = cv.imread("./o.png") #读取图片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应
cv.imshow("input image",src) #通过名字将图像和窗口联系 

三:利用开操作完成的任务

(一)提取水平垂直线

def open_demo(image):
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
ret,binary = cv.threshold(gray,,,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)
cv.imshow("binary",binary)
kernel = cv.getStructuringElement(cv.MORPH_RECT,(1,15))  #修改内核为(15,1)可以提起横线
binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)
cv.imshow("open_demo",binary)

原理:

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

(二)消除干扰线

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

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

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

矩形:MORPH_RECT;
交叉形:MORPH_CORSS;
椭圆形:MORPH_ELLIPSE;

参考:OpenCV---膨胀与腐蚀

def open_demo(image):
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
ret,binary = cv.threshold(gray,,,cv.THRESH_BINARY|cv.THRESH_OTSU)
cv.imshow("binary",binary)
kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE,(,))
binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)
cv.imshow("open_demo",binary)

OpenCV---开闭操作的更多相关文章

  1. python实现开闭操作

    目录: 开闭操作的作用 (一)开操作 (二)闭操作 (三)开操作完成其他任务 (1)提取水平垂直线 (2)消除干扰线 (3)提取满足要求的形状 开闭操作的作用: (一)开操作(特点作用:消除噪点--- ...

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

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

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

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

  4. OpenCV笔记(2)(高斯平滑、腐蚀和膨胀、开闭运算、礼帽和黑帽、Sobel及其他算子)

    一.高斯平滑(模糊) def gaussian_blur(image): # 设置ksize来确定模糊效果 img = cv.GaussianBlur(image, (5, 5), 0) cv.ims ...

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

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

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

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

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

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

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

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

  9. 深入理解JavaScript系列(7):S.O.L.I.D五大原则之开闭原则OCP

    前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第2篇,开闭原则OCP(The Open/Closed Principle ). 开闭原则的描述是: Software ...

随机推荐

  1. mysql中latin1编码中文转utf8

    在mysql中,对应的表字段编码通常默认为lartin1编码,在本地客户端显示的时候看着是乱码,但是通过mysql -u -p -h命令登录后,select查询到数据是正常的,通过jdbc或者php等 ...

  2. springboot 集成 swagger

    1. 首先配置swaggerConfigpackage com.lixcx.lismservice.config; import com.lixcx.lismservice.format.Custom ...

  3. pspo过程文档

    项目计划总结:       日期/任务      听课        编写程序         阅读相关书籍 日总计          周一      110          60         ...

  4. ipv6问题

    1)百度搜索:针对苹果最新审核要求为应用兼容IPv6 2) ipV6测试网址:http://test-ipv6.com/ http://ipv6.jmu.edu.cn/ http://ipv6test ...

  5. 如何打开tensorboard观测训练过程

    TensorBoard是TensorFlow下的一个可视化的工具,能够帮助研究者们可视化训练大规模神经网络过程中出现的复杂且不好理解的运算,展示训练过程中绘制的图像.网络结构等. 最近本人在学习这方面 ...

  6. form表单元素中disabled的元素的值不会提交到服务器

    1.表单元素中disabled的元素的值不会提交到服务器,后台获取的值为null <form id="myForm" action="#" method= ...

  7. sleep() 与 wait()的比较

    1.这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类. sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际上还 ...

  8. PHP中parent关键词

    parent关键词 parent表示“父母”的意思,在面向对象语法中,代表“父类” ——本质上就是代表父类这个“类”,而不是父类的“对象”: 其使用方式为: parent::属性或方法: //通常是静 ...

  9. 编码转换,基础,copy

    阅读目录 编码转换 基础补充 深浅拷贝 文件操作 一,编码转换 1. ASCII : 最早的编码. ⾥⾯有英⽂⼤写字⺟, ⼩写字⺟, 数字, ⼀些特殊字符. 没有中⽂, 8个01代码, 8个bit, ...

  10. webgl学习笔记二-绘图多点

    写在前面 建议先看下第一篇webgl学习笔记一-绘图单点 第一篇文章,介绍了如何用webgl绘图一个点.接下来本文介绍的是如何绘制多个点.形成一个面. webgl提供了一种很方便的机制,即缓冲区对象, ...