(opencv10)膨胀和侵蚀(Dilation与Erosion)
(opencv10)膨胀和侵蚀(Dilation与Erosion)
图像形态学操作
图像形态学操作-基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学
形态学有四个基本操作:腐蚀,膨胀,开,闭
膨胀与腐蚀是图像处理中最常用的形态学操作手段
膨胀和腐蚀是对白色部分而言的,不是黑色部分。膨胀就是图像中的白色部分进行膨胀,"领域扩张",效果图拥有比原图更大的高亮区域。腐蚀就是原图中的高亮部分被腐蚀,“领域被蚕食”,效果图拥有比原图更小的高亮区域
膨胀与腐蚀能实现多种多样的功能,主要如下:
消除噪声
分割(isolate)出独立的图像元素,在图像中连接(join)相邻的元素。
寻找图像中的明显的极大值区域或极小值区域
求出图像的梯度
腐蚀:erosion = erode(src, kernel, iterations=None)
src
输入图,一般用黑白图像,二值化图像
Kernel
指定卷积核大小
示例代码01
img = cv2.imread('huage.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel = np.ones((5, 5), np.uint8)
erosion = cv2.erode(img, kernel)
cv2.imshow('erosion', erosion)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果02

一个5*5的方框进行像素遍历, 改变中心点的值,都黑全黑,都白全白,有黑有白为黑。
膨胀: dilate = dilate(src, kernel,iterations=None)
src
输入图,一般用黑白图像,二值化图像
Kernel
指定卷积核大小
示例代码02
img = cv2.imread('huage.png')
kernel = np.ones((10, 10), np.uint8)
dilate = cv2.dilate(img, kernel, iterations=1)
cv2.imshow('dilate', dilate)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果02

一个10*10的方框进行像素遍历,改变中心点的值,都黑全黑, 都白全白,有黑有白为白
开运算闭运算
开运算,先腐蚀,后膨胀
闭运算,先膨胀,后腐蚀
示例代码03
img = cv2.imread('huage.png')
kernel = np.ones((5, 5), np.uint8)
# 开:先腐蚀,后膨胀
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN,kernel)
# 闭: 先膨胀,后腐蚀
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
cv2.imshow('img', img)
cv2.imshow('closing', closing)
cv2.imshow('opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()
运算结果03

梯度运算(膨胀-腐蚀)
示例代码04
# 梯度 = 膨胀-腐蚀
pie = cv2.imread('huage.png')
kernel = np.ones((7, 7), np.uint8)
dilate = cv2.dilate(pie, kernel)
erosion = cv2.erode(pie, kernel)
# 两个图像像素点水平拼接
res = np.hstack((dilate, erosion))
cv2.imshow('res', res)
cv2.imshow('pie', pie)
# 梯度运算
gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)
cv2.imshow('gradient', gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果04


礼帽与黑帽
礼帽 :原始输入 - 开运算结果
黑帽: 闭运算结果 - 原始输入
示例代码05
img = cv2.imread('huage.png')
kernel = np.ones((7, 7), np.uint8)
# 礼帽
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('tophat', tophat)
# 黑帽
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('blackhat', blackhat)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果05

礼帽: 显示出开运算去掉的区域
黑帽: 显示出闭运算增加的区域
(opencv10)膨胀和侵蚀(Dilation与Erosion)的更多相关文章
- opencv-图像形态学之膨胀腐蚀
转自:https://blog.csdn.net/poem_qianmo/article/details/23710721 一.原理 1.1 形态学概述 形态学(morphology)一词通常表示生物 ...
- [转]opencv学习资料
转自:http://blog.csdn.net/poem_qianmo/article/details/20537737 1:Mat imread(const string& filename ...
- 学习 opencv---(9)形态学图像处理(一):膨胀和腐蚀
本篇文章中,我们一起探究了图像处理中,最基本的形态学运算--膨胀与腐蚀.浅墨在文章开头友情提醒,用人物照片做腐蚀和膨胀的素材图片得到的效果会比较惊悚,毁三观的,不建议尝试.......... 一.理论 ...
- OpenCV图像处理篇之腐蚀与膨胀
转载请注明出处:http://xiahouzuoxin.github.io/notes 腐蚀与膨胀 腐蚀和膨胀是图像的形态学处理中最主要的操作,之后遇见的开操作和闭操作都是腐蚀和膨胀操作的结合运算. ...
- 机器学习进阶-图像形态学操作-膨胀操作 1.cv2.dilate(进行膨胀操作)
1.cv2.dilate(src, kernel, iteration) 参数说明: src表示输入的图片, kernel表示方框的大小, iteration表示迭代的次数 膨胀操作原理:存在一个ke ...
- crack|erosion|strip|
V-ERG (使)破裂;(使)裂开;(使)断裂 If something hard cracks, or if you crack it, it becomes slightly damaged, w ...
- TensorLayer官方中文文档1.7.4:API – 数据预处理
所属分类:TensorLayer API - 数据预处理¶ 我们提供大量的数据增强及处理方法,使用 Numpy, Scipy, Threading 和 Queue. 不过,我们建议你直接使用 Tens ...
- Image Processing and Analysis_8_Edge Detection:Edge and line oriented contour detection State of the art ——2011
此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...
- python+opencv实现车牌定位
写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验三,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验三. 由于时间紧张,代码没有进行任何优化, ...
随机推荐
- SpringCloud(1)生态与简绍
一:微服务架构简绍学习目标 1.技术架构的演变,怎么一步步到微服务的:2.什么是微服务,优点与缺点 :3.SOA(面向服务)与MicroServices(微服务)的区别 :4.Dubbo 与Spri ...
- 【Java】Debug断点调试常用技巧
Debug操作技巧 Show Execution Point 将光标回到当前断点停顿的地方 Step Over 执行当前行代码,并将运行进度跳转到下一行. Step Into 进入到当前代码行的方法内 ...
- csp-s模拟测试56(10.2)Merchant「二分」·Equation「树状数组」
又死了......T1 Merchant 因为每个集合都可以写成一次函数的形式,所以假设是单调升的函数,那么随着t越大就越佳 而单调减的函数,随着t的增大结果越小,所以不是单调的??? 但是我们的单调 ...
- JDK并发包一
JDK并发包一 同步控制是并发程序必不可少的重要手段,synchronized是一种最简单的控制方法.但JDK提供了更加强大的方法----重入锁 重入锁 重入锁使用java.util.concurre ...
- excel函数提取内容中的汉字
RIGHT(A2,LENB(A2)-LEN(A2)) 函数LENB将每个汉字(双字节字符)的字符数按2计数,LEN函数则对所有的字符都按1计数.因此"LENB(A2)-LEN(A2)&quo ...
- base64的实现原理
base64是处理二进制数据的一种编码方式,可用于把二进制数据编码成64个可打印的字符. 学习base64之前,先了解一下什么是字节与编码 什么是字节 互联网中的数据都是用字节来表示的,一个字节有8位 ...
- Go基础语法0x01-数组
数组 1.Go数组简介 数组是Go语言编程中最常用的数据结构之一.顾名思义,数组就是指一系列同一类型数据的集合.数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的 ...
- jenkins pipeline构建后发送邮件通知
jenkins pipeline构建后发送邮件通知 mail配置 进入系统配置 找到最下边的邮件通知 创建任务 Pipeline片段 post { always { bat "" ...
- 17、mysql主从同步Last_IO_Errno错误代码说明
登录mysql从库:mysql> show slave status\G; Last_IO_Errno:1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1 ...
- 『无为则无心』Python序列 — 24、Python序列的推导式
目录 1.列表推导式 (1)快速体验 (2)带if的列表推导式 (3)多个for循环实现列表推导式 2.字典推导式 (1)创建一个字典 (2)将两个列表合并为一个字典 (3)提取字典中目标数据 3.集 ...