OpenCV 形态学操作
形态学,即数学形态学(Mathematical Morphology),是图像处理过程中一个非常重要的研究方向。形态学主要从图像内提取分量信息,该分量信息通常对于表达和描绘图像的形状具有重要意义,通常是图像理解时所使用的最本质的形状特征。如,在识别手写数字时,能够通过形态学运算得到其骨架信息等。
形态学操作主要包含:腐蚀、膨胀、开运算、闭运算、形态学梯度运算、顶帽运算(礼帽运算)、黑帽运算等操作。
案例来源于傅老师。
1.腐蚀
腐蚀是最基本的形态学操作之一,它能够将图像的边界点消除,使图像沿着边界向内收缩,也可以将小于指定结构体元素的部分去除。
腐蚀用来“收缩”或“细化”二值图像中的前景,借此实现去除噪声、元素分割等功能。可以使用函数cv2.erode()实现腐蚀操作。
import cv2
import numpy as np
img = cv2.imread('j.bmp')
kernel = np.ones((3,3),np.uint8)
erosion = cv2.erode(img,kernel,iterations = 1)
cv2.imshow('erosion', erosion)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
2.膨胀
膨胀操作是形态学中另外一种基本的操作。膨胀操作和腐蚀操作的作用是相反的,膨胀操作将与当前对象(前景)接触到的背景点合并到当前对象内,从而实现将图像的边界点向外扩张。
膨胀操作采用函数cv2.dilate()实现对图像的膨胀操作。
import cv2
import numpy as np
img = cv2.imread('j.bmp')
kernel = np.ones((3,3),np.uint8)
dige_erosion = cv2.erode(img,kernel,iterations = 1)
kernel = np.ones((5,5),np.uint8)
dige_dilate = cv2.dilate(dige_erosion,kernel,iterations = 1)
cv2.imshow('dilate', dige_dilate)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
3.通用形态学函数
通用形态学函数将腐蚀和膨胀操作进行组合,可以实现开运算、闭运算、形态学梯度运算、礼帽运算、黑帽运算、击中击不中等多种不同形式的运算。
OpenCV提供了函数cv2.morphologyEx()来实现上述形态学运算。
开运算:先腐蚀后膨胀
import cv2
import numpy as np
# 开:先腐蚀,再膨胀
img = cv2.imread('j.bmp')
kernel = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv2.imshow('opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()
闭运算:先膨胀后腐蚀
import cv2
import numpy as np
# 闭:先膨胀,再腐蚀
img = cv2.imread('j.bmp')
kernel = np.ones((5,5),np.uint8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
cv2.imshow('closing', closing)
cv2.waitKey(0)
cv2.destroyAllWindows()
礼帽运算:原始图像 - 开运算
import cv2
import numpy as np
#礼帽
img = cv2.imread('j.bmp')
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()
黑帽运算:闭运算 - 原始图像
import cv2
import numpy as np
#黑帽
img = cv2.imread('j.bmp')
blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('blackhat', blackhat )
cv2.waitKey(0)
cv2.destroyAllWindows()
4.核函数
在进行形态学操作时,必须使用一个特定的核(结构元)。该核可以自定义生成,也可以通过函数cv2.getStructuringElement()构造。
import cv2
import numpy as np
img=cv2.imread('morph01.png')
img_cvt = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,img_thr = cv2.threshold(img_cvt,150,255,cv2.THRESH_BINARY)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(14,1))
dst1 = cv2.dilate(img_thr,kernel,iterations=1)
kernel2 = cv2.getStructuringElement(cv2.MORPH_RECT,(1,14))
dst2 =cv2.dilate(img_thr,kernel2,iterations=1)
dst=cv2.bitwise_and(dst2,dst1)
cv2.imshow("img_cvt",img_cvt)
cv2.imshow("dst",dst)
cv2.imwrite("dst.jpg",dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
实践:
import cv2
import numpy as np
def show(name,img):cv2.imshow(name,img) cv2.waitKey(0)cv2.destroyAllWindows()
img=cv2.imread("xuexi.jpg",0)
h,w=img.shape
src=cv2.resize(img,(int(w/3),int(h/3)))
show('src',src)
binary = cv2.threshold(src,200,255,0)[1]
show('binary',binary)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(45,1))
DilateImg =cv2.dilate(binary,kernel)
result=cv2.morphologyEx(src,cv2.MORPH_BLACKHAT,kernel)
dst=cv2.bitwise_not(result)
show("dst",dst)
OpenCV 形态学操作相关推荐
- OpenCV形态学操作
OpenCV形态学操作 本文转载自:http://blog.csdn.net/byxdaz/article/details/5775717 一.图像腐蚀 膨胀 细化的基本原理 1.图像细化的基本原 ...
- OpenCV 形态学操作之腐蚀与膨胀,开运算与闭运算,顶帽与黑帽,图像梯度运算相关知识点回顾
Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧.本篇博客是这个系列的第 45 篇. 该系列文章导航参考:https://blog.csdn.net/hihell/categ ...
- 15、OpenCV形态学操作——Hit-or-Miss
OpenCV形态学操作--Hit-or-Miss 一.学习目标 二.Hit-or-Miss 一.学习目标 理解什么是Hit-or-Miss 学会在OpenCV中使用Hit-or-Miss 二.Hit- ...
- OpenCV 形态学操作应用——提取水平与垂直线
文章目录 原理方法 提取步骤 输入图像彩色图像 `imread` 转换为灰度图像 – `cvtColor` 转换为二值图像 – `adaptiveThreshold` 定义结构元素: 开操作 (腐蚀+ ...
- opencv 形态学操作(python)
形态学操作 形态学操作 腐蚀 膨胀 通用形态学函数 开运算 闭运算 形态学梯度运算 礼帽运算 黑帽运算 核函数 形态学操作 形态学,即数学形态学(Mathematical Morphology),是图 ...
- C++ OpenCV形态学操作--开闭操作,形态学梯度,顶帽,黑帽
https://my.oschina.net/u/4582134/blog/4582844
- 使用Python,OpenCV进行形态学操作
使用Python,OpenCV进行形态学操作) 1. 效果图 2. 原理 3. 源码 3.1 [制作logo源码](https://blog.csdn.net/qq_40985985/article/ ...
- OpenCV(八)形态学操作3--形态学梯度实现轮廓分析(基本梯度、内部梯度、外部梯度、方向梯度X(Y))
目录 形态学梯度概述 一.基本梯度 1.原理 2.代码 3.效果 二.内部梯度 1.原理 2.代码 3.效果 三.外部梯度 1.原理 2.代码 3.效果 四.方向梯度 1.原理 2.二值化图像(黑白) ...
- OpenCV中图像形态学操作
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:视学算法 图像形态学是图像处理的分支学科,在二值图像处理 ...
最新文章
- 如何使用Bootstrap4显示和隐藏元素
- K:hash(哈希)碰撞攻击
- 面向过程和面向对象编程的优缺点
- 《改善java代码》第一章:java开发通用原则
- spring中getBeansWithAnnotation(Class<? extends Annotation> annotationType)方法
- 学习Java的三十三个建议
- Java线程并发常用工具类使用
- 16bit随机数生成matlab,关于matlab生成随机数
- VRRP实现AC双机备份原理详解与配置实例
- wordpress数据字典
- 德纳研报丨基于区块链的邮箱Damil已完成种子轮融资,会是下一个ENS吗
- Unite Beijing 2018 | 精彩游戏案例议题曝光
- 意识与本我、自我、超我理论
- Java后端学习,推荐书籍和学习路线
- python5.网络爬虫
- 执行scp命令自动输入密码的方法(expect方案)
- model.parameters()的理解与使用
- 装scrapy报错failed with error code 1 in C:\Users\ADMINI~1\AppData\Local\Temp\pip-install-dvrc8k5o\Twis
- 深度学习——手写数字识别底层实现
- 海康大华等网络摄像机监控视频RTSP/RTMP推流网页播放/直播无需插件低延迟解决方案研究
热门文章
- IDEA:更新项目:remote: [31mx-oauth-basic: Incorrect username or password (access token)
- Scala之模式匹配
- CentOS 安装docker配置阿里云镜像加速
- 用蒲公英分发一个app
- 比例方向阀放大器比例节流阀放大板
- mac版本的eclipse安装springboot开发插件(STS)
- 为什么面试官不选你,看完这5条就明白了。。。
- C语言 if.....else语句(双分支结构)
- 全链路追踪 skywalking 和 pinpoint
- 服务器win2003远程桌面连接设置密码,windows2003远程桌面配置 不用每次输密码,改颜色,更改连接数等 (转)...