(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年秋季学期的视觉实验三. 由于时间紧张,代码没有进行任何优化, ...
随机推荐
- storage事件中的坑,storage.setItem()无法触发storage事件
一.概述 众所周知,以下代码可以用来监听页面中localstorage和sessionstorage中属性值的变化 window.addEventListener('storage', event=& ...
- SpringBoot面试题 (史上最全、持续更新、吐血推荐)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- 【NLP学习其三】在学习什么是嵌入之前,你应该了解什么是词语表征
在了解什么是嵌入(embeddings)之前,我们需要先搞清楚一个词语在NLP中是如何被表示的 注:本次不涉及任何具体算法,只是单纯对概念的理解 词汇表征 One-Hot 词汇的表示方法有很多,最有名 ...
- python读取csv文件数据绘制图像,例子绘制天气每天最高最低气温气象图
- 从零实操基于WSL2 Docker部署Asp.Net Core项目
前言 平日在公司里都是基于阿里Teambition中的飞流进行Docker部署Api项目或服务,已经习惯了那一套成熟的操作流程,开发和部署确实快捷方便,但是还没在自己的电脑上进行操作过,特别是Wind ...
- Binding(四):数据校验
除了上一节讲的类型转换器,Binding还自带数据校验功能,这节主要来讲一下. 跟类型转换器一样,数据校验需要我们继承ValidationRule类,实现其中的Validate方法,并写入我 ...
- POJ 2299 Ultra-QuickSort 求逆序数 线段树或树状数组 离散化
我用的线段树写的. num数组表示已插入的数值的个数. 由于a[i]数值很大,但是n不是很大,所以要离散化处理 9 1 0 5 4 离散化后 4 1 0 3 2 这样保证最大值不会超过n #inclu ...
- 使用.net6 WebApplication打造最小API
.net6在preview4时给我们带来了一个新的API:WebApplication,通过这个API我们可以打造更小的轻量级API服务.今天我们来尝试一下如何使用WebApplication设计一个 ...
- 【Python从入门到精通】(九)Python中字符串的各种骚操作你已经烂熟于心了么?
您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本文将重点介绍Python字符串的各种常用方法,字符串是实际开发中经常用到的,所有熟练的掌握它的各种用法显得尤为重要. 干货满满,建议收藏,欢迎大 ...
- Centos-Springboot项目jar包自启动
CentOS环境下部署Springboot项目的jar包开机自启动. 部署环境 Centos 7.5 Springboot 2.1.x 操作步骤 修改pom 在pom.xml文件中<plugin ...