(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)的更多相关文章

  1. opencv-图像形态学之膨胀腐蚀

    转自:https://blog.csdn.net/poem_qianmo/article/details/23710721 一.原理 1.1 形态学概述 形态学(morphology)一词通常表示生物 ...

  2. [转]opencv学习资料

    转自:http://blog.csdn.net/poem_qianmo/article/details/20537737 1:Mat imread(const string& filename ...

  3. 学习 opencv---(9)形态学图像处理(一):膨胀和腐蚀

    本篇文章中,我们一起探究了图像处理中,最基本的形态学运算--膨胀与腐蚀.浅墨在文章开头友情提醒,用人物照片做腐蚀和膨胀的素材图片得到的效果会比较惊悚,毁三观的,不建议尝试.......... 一.理论 ...

  4. OpenCV图像处理篇之腐蚀与膨胀

    转载请注明出处:http://xiahouzuoxin.github.io/notes 腐蚀与膨胀 腐蚀和膨胀是图像的形态学处理中最主要的操作,之后遇见的开操作和闭操作都是腐蚀和膨胀操作的结合运算. ...

  5. 机器学习进阶-图像形态学操作-膨胀操作 1.cv2.dilate(进行膨胀操作)

    1.cv2.dilate(src, kernel, iteration) 参数说明: src表示输入的图片, kernel表示方框的大小, iteration表示迭代的次数 膨胀操作原理:存在一个ke ...

  6. crack|erosion|strip|

    V-ERG (使)破裂;(使)裂开;(使)断裂 If something hard cracks, or if you crack it, it becomes slightly damaged, w ...

  7. TensorLayer官方中文文档1.7.4:API – 数据预处理

    所属分类:TensorLayer API - 数据预处理¶ 我们提供大量的数据增强及处理方法,使用 Numpy, Scipy, Threading 和 Queue. 不过,我们建议你直接使用 Tens ...

  8. Image Processing and Analysis_8_Edge Detection:Edge and line oriented contour detection State of the art ——2011

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...

  9. python+opencv实现车牌定位

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验三,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验三. 由于时间紧张,代码没有进行任何优化, ...

随机推荐

  1. 『言善信』Fiddler工具 — 15、使用Fiddler抓取HTTPS请求

    目录 1.Fiddler抓取HTTPS过程 2.拓展:SSL/TLS证书握手原理 3.Fiddler抓取HTTPS原理总结 4.Fiddler抓取HTTPS设置 步骤1:配置证书 步骤2:勾选设置 5 ...

  2. Java中,一个存在十几年的bug...

    今天,分享一个JDK中令人惊讶的BUG,这个BUG的神奇之处在于,复现它的用例太简单了,人肉眼就能回答的问题,JDK中却存在了十几年.经过测试,我们发现从JDK8到14都存在这个问题. 大家可以在自己 ...

  3. NOIP模拟测试24「star way to hevaen·lost my music」

    star way to heaven 题解 大致尝试了一下并查集,记忆化搜索,最小生成树 最小生成树是正解,跑最小生成树然后找到最大的值 欧几里德距离最小生成树学习 prim楞跑 至于为什么跑最小生成 ...

  4. RobotFramework + Python 自动化入门 三 (Web自动化)

    在<RobotFramwork + Python 自动化入门 一>中,完成了一个Robot环境搭建及测试脚本的创建和执行. 在<RobotFramwork + Python 自动化入 ...

  5. 一文带你走遍Git世界,教会你Git的使用

    @ 目录 这篇文章教会Git 1. Git是什么? 1.1 发展历程 1.2 Git是什么? 1.3 Git和SVN 2.Git有什么用? 2.1 代码合并 2.2 代码备份 2.3 代码还原 2.4 ...

  6. 看完互联网大佬的「LeetCode 刷题手册」, 手撕了 400 道 Leetcode 算法题

    大家好,我是 程序员小熊 ,来自 大厂 的程序猿.相信绝大部分程序猿都有一个进大厂的梦想,但相较于以前,目前大厂的面试,只要是研发相关岗位,算法题基本少不了,所以现在很多人都会去刷 Leetcode ...

  7. 14、CentOS7安装过程中,磁盘大于2T的报错处理

    问题描述 服务器磁盘单盘空间大于2TB,在安装CentOS7时出现下图报错: Boot failure.Reboot and Select proper Boot device... 问题原因: 安装 ...

  8. 5、修改oracle的字符集

    注意:修改字符集前需要将表空间进行数据泵备份: 5.1.修改server端字符集: 1.登录到oracle实例查看字符集: [oracle@slave-node2 ~]$ echo $ORACLE_S ...

  9. To_Heart—题解——AT2165

    这是一篇解题报告 首先,看到标签,考虑二分答案. 我们二分答案(即塔顶的值),把大于或等于这个值的变为1,否则变为0. 很容易发现,如果塔顶的答案是1,那么就说明值可以更大,否则相反. 复制一波样例 ...

  10. 【玩转 WordPress】基于 Serverless 搭建个人博客图文教程,学生党首选!

    以下内容来自「玩转腾讯云」用户原创文章,已获得授权. 01. 什么是 Serverless? 1. Serverless 官方定义 Serverless 中的 Server是服务器的意思,less 是 ...