OpenCV-Python:形态学操作
常用的形态学操作:腐蚀、膨胀、开运算和闭运算
一、什么叫形态学操作
形态学操作就是改变物体的形状,比如腐蚀就是"变瘦",膨胀就是"变胖"

形态学操作一般作用于二值化图,来连接相邻的元素或分离成独立的元素。腐蚀和膨胀是针对图片中的白色部分!
白色的像素为255,黑色的像素值为0
二、腐蚀与膨胀
1. 腐蚀
腐蚀的效果是把图片"变瘦",其原理是在原图的小区域内取局部最小值。因为是二值化图,只有0和255,所以小区域内有一个0该像素点就为0:

这样原图中边缘的地方就会变成0(黑色),达到了瘦身的效果。
OpenCV中用 cv2.erode() 函数进行腐蚀,只需要指定核的大小就行:
import cv2
import numpy as np
img = cv2.imread('j.bmp', 0)
kernel = np.ones((5, 5), np.uint8)
erosion = cv2.erode(img, kernel) # 腐蚀
这个核也叫结构元素,因为形态学操作其实也是应用卷积来实现的。结构元素可以是矩形、椭圆、十字形,可以用 cv2.getStructuringElement() 来生成不同形状的结构元素,比如:
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 矩形结构
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) # 椭圆结构
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5)) # 十字形结构

博主替换过核,效果差距不大。
2. 膨胀
膨胀与腐蚀相反,取的是局部最大值,效果是把图片变胖:
dilation = cv2.dilate(img, kernel) # 膨胀
img = cv2.imread('j.bmp')
kernel = np.ones((5, 5), np.uint8) # 矩形结构
erosion = cv2.erode(img, kernel) # 腐蚀
dilation = cv2.dilate(img, kernel) # 膨胀
titles = ['Original', 'erosion', 'dilation']
images = [img, erosion, dilation]
# 使用Matplotlib显示
# 一行三列图
for i in range(3):
plt.subplot(1, 3, i + 1)
plt.imshow(images[i])
plt.title(titles[i], fontsize=8)
plt.xticks([]), plt.yticks([])
plt.show()

三、开、闭运算
先腐蚀后膨胀叫开运算(因为先腐蚀会分开物体),其作用是:分离物体,消除小区域。使用 cv.morphologyEx() 函数实现:
# 开运算--先腐蚀后膨胀
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) img1 = cv2.imread('j_noise_out.bmp')
opening = cv2.morphologyEx(img1, cv2.MORPH_OPEN, kernel)
闭运算则相反:先膨胀后腐蚀(先膨胀会使白色的部分扩张,以至于消除"闭合"物体里面的小黑洞,所以叫闭运算)
# 闭运算--先膨胀后腐蚀
img2 = cv2.imread('j_noise_in.bmp')
closing = cv2.morphologyEx(img2, cv2.MORPH_CLOSE, kernel)

开、闭运算确实很容易混淆。如果我们的目标物体外面有很多无关的小区域,就用开运算去除掉;如果物体内部有很多小黑洞,就用闭运算填充掉
四、形态学梯度、顶帽、黑帽
形态学梯度:膨胀图减去腐蚀图,dilation - erosion,这样会得到物体的轮廓:
img = cv2.imread('school.bmp', 0)
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

顶帽:原图减去开运算后的图:src - opening
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)

黑帽:闭运算后的图减去原图:closing - src

五、小结
1. 形态学就是改变物体的形状,腐蚀是物体"变瘦"、膨胀使物体"变胖"
2. 先腐蚀后膨胀会分离物体,所以叫开运算,常用来去除小区域物体
3. 先膨胀后腐蚀会消除物体内的小洞,所以叫闭运算。
OpenCV-Python:形态学操作的更多相关文章
- opencv python实用操作
画多边形 fillConvexPloy与fillConvexPloy的区别 fillConvexPloy 用来画单个凸多边形: 如果点集的连线不是凹多边形,则会找一个最小的凸多边形把该凹多边形包住画出 ...
- opencv:形态学操作-开闭操作
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
- opencv:形态学操作-腐蚀与膨胀
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
- 【图像处理】OpenCV+Python图像处理入门教程(七)图像形态学操作
图像形态学主要从图像内提取分量信息,该分量信息通常对表达图像的特征具有重要意义.例如,在车牌号码识别中,能够使用形态学计算其重要特征信息,在进行识别时,只需对这些特征信息运算即可.图像形态学在目标视觉 ...
- OPENCV形态学操作1
形态学操作是指基于形状的一系列图像处理操作,包括膨胀,腐蚀,二值化,开运算,闭运算,顶帽算法,黑帽算法,形态学梯度等,最基本的形态学操作就是膨胀和腐蚀. 一.膨胀 首先需要明确一个概念,膨胀和腐蚀都是 ...
- OpenCV学习笔记(六) 滤波器 形态学操作(腐蚀、膨胀等)
转自:OpenCV 教程 另附:计算机视觉:算法与应用(2012),Learning OpenCV(2009) 平滑图像:滤波器 平滑 也称 模糊, 是一项简单且使用频率很高的图像处理方法.平滑处理的 ...
- OpenCV 图象腐蚀形态学操作 全家桶
图象腐蚀与形态学操作 opencv 1. 通过调用库函数实现图像的腐蚀.膨胀: 2. 通过设置结构元素.元素大小.形态学操作类型实现对图象的形态学操作. 源码(VS2017+OpenCV 4.0) # ...
- python opencv入门-形态学转换
目标: 学习不同的形态操作 例如 腐蚀.膨胀.开运算.闭运算 等. 我们要学习的函数有 cv2.erode(),cv2.dilate(),cv2.morphologyEx() 等. 原理 :一般对二值 ...
- opencv学习笔记(五)----图像的形态学操作
图像的形态学操作有基本的腐蚀和膨胀操作和其余扩展形态学变换操作(高级操作)-----开运算,闭运算,礼帽(顶帽)操作,黑帽操作...(主要也是为了去噪声,改善图像) 形态学操作都是用于处理二值图像(其 ...
- opencv::形态学操作
形态学操作 开操作- open 闭操作- close 形态学梯度- Morphological Gradient 顶帽 – top hat 黑帽 – black hat 开操作- open 先腐蚀后膨 ...
随机推荐
- [BZOJ 3992] [SDOI 2015] 序列统计
Description 传送门 Solution [一] 设 \(f[i][j]\) 表示前 \(i\) 个数的乘积在模 \(p\) 意义下等于 \(j\) 的方案数,有 \[ f[i][j]=\su ...
- shell实战之日志脱敏
本次实战目标为日志脱敏,将日志目录内的所有文件进行处理,凡是涉及到卡号和密码的信息,一律以“*”号替代,要替代的内容都从对应的标签内获取,本脚本执行目录 drwxr-xr-x 5 root root ...
- ubuntu16.04连接wifi
前提:实验室里没有网线,也没有无线网络,只能用个人手机开热点上网! Then~~ 首先参考了这两篇博文: https://blog.csdn.net/weixin_41762173/article/d ...
- docker的基础命令
详细命令参考http://www.runoob.com/docker/docker-command-manual.html
- 转:centos 7 安装音频视频解码器
(原文:https://blog.csdn.net/zhou1519/article/details/39035233/) 1.安装额外的软件源epel和nux-dextop rpm -Uvh htt ...
- 2017-12-19python全栈9期第四天第二节之列表的增删查改之按索引改和按切片改
#!/user/bin/python# -*- coding:utf-8 -*-li = ['zs','ls','ww','zl','xx']li[0] = 'cxvb' #按索引位置print(li ...
- [物理学与PDEs]第2章习题7 一维不可压理想流体的求解
设有以 $x$ 轴为轴向的等轴截面管道, 其中充满着沿 $x$ 方向流动的不可压缩的理想流体, 在每一横截面上流体的状态相同, 且 $p=p(x)$. 若已知 $p(0) =p_1$, $p(L)=p ...
- 高并发秒杀系统--SpringMVC整合
[SpringMVC运行流程] [Handler注解映射技巧] [请求方法的细节处理] 1.如何处理请求参数和方法参数的绑定? 2.如何限制方法接收的请求方式? 3.如何进行请求转发和重定向? 4.如 ...
- safari中input、textarea无法输入的问题
网址:https://www.cnblogs.com/xiayu25/p/6832748.html * { -webkit-box-sizing: border-box; -moz-box-sizin ...
- php session的用法
初始 Session: session_start(). 存储 Session 变量:$_SESSION['name']='快聘100'; 调用Session:$name = $_SESSION['n ...