OpenCV---开闭操作
一:开操作(先腐蚀后膨胀)
特点:消除噪点,去除小的干扰块,而不影响原来的图像
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;
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---开闭操作的更多相关文章
- python实现开闭操作
目录: 开闭操作的作用 (一)开操作 (二)闭操作 (三)开操作完成其他任务 (1)提取水平垂直线 (2)消除干扰线 (3)提取满足要求的形状 开闭操作的作用: (一)开操作(特点作用:消除噪点--- ...
- opencv 双边模糊,膨胀腐蚀 开 闭操作
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; int main(int argc, ...
- opencv:形态学操作-开闭操作
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
- OpenCV笔记(2)(高斯平滑、腐蚀和膨胀、开闭运算、礼帽和黑帽、Sobel及其他算子)
一.高斯平滑(模糊) def gaussian_blur(image): # 设置ksize来确定模糊效果 img = cv.GaussianBlur(image, (5, 5), 0) cv.ims ...
- OpenCV3编程入门笔记(4)腐蚀、膨胀、开闭运算、漫水填充、金字塔、阈值化、霍夫变换
腐蚀erode.膨胀dilate 腐蚀和膨胀是针对图像中的白色部分(高亮部分)而言的,不是黑色的.除了输入输出图像外,还需传入模板算子element,opencv中有三种可以选择:矩形MORPH_RE ...
- [设计模式]<<设计模式之禅>>关于开闭原则
开闭原则是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的.灵活的系统,先来看开闭原则的定义: Software entities like classes,modules and fun ...
- 【设计模式】之开闭原则(OCP)
开闭原则是面向对象设计的一个重要原则,其定义如下: 开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭.即软件实体应尽量在不修改原有代码的情况下进 ...
- 【面向对象设计原则】之开闭原则(OCP)
开闭原则是面向对象设计的一个重要原则,其定义如下: 开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭.即软件实体应尽量在不修改原有代码的情况下进 ...
- 深入理解JavaScript系列(7):S.O.L.I.D五大原则之开闭原则OCP
前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第2篇,开闭原则OCP(The Open/Closed Principle ). 开闭原则的描述是: Software ...
随机推荐
- 实现属于自己的TensorFlow(一) - 计算图与前向传播
前段时间因为课题需要使用了一段时间TensorFlow,感觉这种框架很有意思,除了可以搭建复杂的神经网络,也可以优化其他自己需要的计算模型,所以一直想自己学习一下写一个类似的图计算框架.前几天组会开完 ...
- mysql 查询数据库或某张表有多大(字节)
转载:https://www.cnblogs.com/diandiandidi/p/5582309.html 1.要查询表所占的容量,就是把表的数据和索引加起来就可以了 select sum(DATA ...
- Opendarlight Carbon 安装
写在前面 目前最轻松的一次安装过程,感谢大翔哥的帮助. 安装过程 1.Zip包下载 找到Opendaylight官网,进入下载界面找到Carbon版本并下载. 2.Zip包解压 把这个zip压缩包解压 ...
- Floyd算法(原理|代码实现)
http://www.cnblogs.com/twjcnblog/archive/2011/09/07/2170306.html 正如我们所知道的,Floyd算法用于求最短路径.Floyd算法可以说是 ...
- lintcode-491-回文数
491-回文数 判断一个正整数是不是回文数. 回文数的定义是,将这个数反转之后,得到的数仍然是同一个数. 注意事项 给的数一定保证是32位正整数,但是反转之后的数就未必了. 样例 11, 121, 1 ...
- 第14章 Linux账号管理与ACL权限设置
Linux的账号与用户组 用户标识符:UID与GID 每一个文件都有一个所有者ID和用户组ID,当我们需要查看文件属性时,系统会根据/etc/passwd和/etc/group的内容,找到对应UID和 ...
- Thrift语法参考
1.Types Thrift类型系统包括预定义基本类型,用户自定义结构体,容器类型,异常和服务定义 (1) 基本类型 bool: 布尔类型,占一个字节 byte: 有符号字节 i16:16位有符号整型 ...
- JS扫雷原理性代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 阿里中间件RocketMQ
阿里RocketMQ是怎样孵化成Apache顶级项目的? RocketMQ 迈入50万TPS消息俱乐部 Apache RocketMQ背后的设计思路与最佳实践 专访RocketMQ联合创始人:项目思路 ...
- 第162天:canvas中Konva库的使用方法
本篇接着上一篇:第157天:canvas基础知识详解 继续来写. 五.Konva的使用快速上手 5.1 Konva的整体理念 Stage | +------+------+ | ...