一、腐蚀、膨胀、开运算、闭运算

腐蚀:图像中的高亮部分进行膨胀
膨胀:原图中的高亮部分被腐蚀,类似于领域被蚕食
开运算:先腐蚀再膨胀,可以去掉目标外孤立的点
闭运算:先膨胀再腐蚀,可以去掉目标内的孔

二、python

以下图为例:

二值化图:

腐蚀后图:
上述算法代码:

import cv2 as cv
import matplotlib.pyplot as plt
def erode_demo(image):  #腐蚀print(image.shape)gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)plt.figure("binary")plt.imshow(binary)plt.axis('off')plt.title('binary')plt.show()kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))#可以修改卷积核大小来增加腐蚀效果,越大腐蚀越强dst = cv.erode(binary,kernel)plt.figure("erode_demo")plt.imshow(dst)plt.axis('off')plt.title('erode_demo')plt.show()src = cv.imread("./11.jpg")  #读取图片erode_demo(src)
plt.figure("input image")
plt.imshow(src)
plt.axis('off')
plt.title('erode_demo')
plt.show()

opencv自带的腐蚀算法,效果不是很好:

上述算法代码:

import cv2
import numpy as np## 测试图片,为反斜杠
pic = './11.jpg'## a.图像的二值化 ,这里没有做阈值处理
src = cv2.imread(pic,cv2.IMREAD_UNCHANGED)## b.设置卷积核5*5
kernel = np.ones((3,3),np.uint8)## c.图像的腐蚀,默认迭代次数
erosion = cv2.erode(src,kernel)## 效果展示
plt.figure("origin")
plt.imshow(src)
plt.axis('off')
plt.title('origin')
plt.show()## 腐蚀后
plt.figure("after erosion")
plt.imshow(erosion)
plt.axis('off')
plt.title('after erosion')
plt.show()

膨胀:

代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt
## 测试图片,为反斜杠
pic = './11.jpg'## a.图像的二值化 ,这里没有做阈值处理
src = cv2.imread(pic,cv2.IMREAD_UNCHANGED)## b.设置卷积核5*5
kernel = np.ones((5,5),np.uint8)## 图像的膨胀
dst = cv2.dilate(src,kernel)## 膨胀后plt.figure("after dilate")
plt.imshow(dst)
plt.axis('off')
plt.title('after dilate')
plt.show()

开运算与闭运算:
代码:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt# 读取图片
source = cv.imread("./11.jpg", cv.IMREAD_GRAYSCALE)# 设置卷积核
kernel = np.ones((5, 5),np.uint8)# 图像腐蚀
erode_img = cv.erode(source, kernel)# 图像膨胀
dilate_result = cv.dilate(erode_img, kernel)# 显示结果
titles = ['Source Img','Erode Img','Dilate Img']
images = [source, erode_img, dilate_result]# matplotlib 绘图
for i in range(3):plt.subplot(1, 3, i+1), plt.imshow(images[i],'gray')plt.title(titles[i])plt.xticks([]),plt.yticks([])plt.show()

三、matlab

腐蚀:
J = imerode(I,SE)
J = imerode(I,nhood)
J = imerode(___,packopt,m)
J = imerode(___,shape)

J = imerode(I,SE) 腐蚀灰度图像、二值图像或压缩二值图像 I,返回腐蚀图像 J。SE 是结构元素对象或结构元素对象的数组,由 strel 或 offsetstrel 函数返回。

J = imerode(I,nhood) 腐蚀图像 I,其中 nhood 是由指定结构元素邻域的 0 和 1 组成的矩阵。imerode 函数通过 floor((size(nhood)+1)/2) 确定邻域的中心元素。

此语法等效于 imerode(I,strel(nhood))。

J = imerode(___,packopt,m) 指定输入图像 I 是否为压缩二值图像。m 指定原始未压缩图像的行维度。

J = imerode(___,shape) 指定输出图像的大小。

以下图为例:
腐蚀:

originalBW = imread('text.png');
se = strel('line',11,90);
erodedBW = imerode(originalBW,se);
figure
imshow(erodedBW)

膨胀:

BW = imread('text.png');
se = strel('line',11,90);
BW2 = imdilate(BW,se);
figure, imshow(BW2), title('Dilated')

腐蚀、膨胀、开运算、闭运算相关推荐

  1. OpenCV与图像处理学习六——图像形态学操作:腐蚀、膨胀、开、闭运算、形态学梯度、顶帽和黑帽

    OpenCV与图像处理学习六--图像形态学操作:腐蚀.膨胀.开.闭运算.形态学梯度.顶帽和黑帽 四.图像形态学操作 4.1 腐蚀和膨胀 4.1.1 图像腐蚀 4.1.2 图像膨胀 4.2 开运算与闭运 ...

  2. C# EMGU 3.4.1学习笔记(三)综合示例:形态学滤波(腐蚀/膨胀、开运算/闭运算、顶帽运算/黑帽运算)

    以下是<OpenCV3编程入门>中6.4.9的示例程序的C# + EMGU 3.4.1版: 有任何问题或疑问,欢迎交流探讨. using System; using System.Coll ...

  3. 膨胀 腐蚀 开运算 闭运算 matlab,11. 形态学膨胀、腐蚀、开运算、闭运算

    1. 膨胀:对边界点进行扩充,填充空洞,使边界向外部扩张的过程. 2. 腐蚀:消除物体边界点,使边界向内部收缩的过程,把小于结构元素的物体去除掉. 3. 开运算: 先腐蚀后膨胀的过程称为开运算,作用: ...

  4. opencv python 图像形态学操作/图像腐蚀/图像膨胀/开运算/闭运算/顶帽/黑帽

    Morphological Transformations 1图像腐蚀 腐蚀的基本思想:侵蚀前景物体的边界(总是试图保持前景为白色):内核在图像中滑动(如在2D卷积中).只有当内核下的所有像素都是1时 ...

  5. Halcon中的基于区域的形态学处理(腐蚀膨胀开闭预算顶底帽运算)

    形态学处理的作用: 用于提取有意义的局部图像细节,通过改变局部区域的像素形态,对图像进行增强,为后续分割.特征提取.边缘检测做准备. 在开始之前,我们先了解一下:结构元素:StructElement ...

  6. 开运算和闭运算的异同

    例一:毛刺在往外凸的面上 策略1:分割出黑色部分,然后通过开运算去掉毛刺,再通过原黑色部分区域减去开运算之后的区域,得到毛刺部分的区域. 1 read_image (Tu, 'C:/Users/xia ...

  7. halcon 开运算与闭运算

    例一:毛刺在往外凸的面上 策略1:分割出黑色部分,然后通过开运算去掉毛刺,再通过原黑色部分区域减去开运算之后的区域,得到毛刺部分的区域. 1 read_image (Tu, 'C:/Users/xia ...

  8. 从去除毛刺的策略看开运算opening_circle和闭运算closing_circle的异同

    例一:毛刺在往外凸的面上 策略1:分割出黑色部分,然后通过开运算去掉毛刺,再通过原黑色部分区域减去开运算之后的区域,得到毛刺部分的区域. 1 read_image (Tu, 'C:/Users/xia ...

  9. 形态学处理:膨胀、腐蚀、开运算、闭运算、形态学梯度、顶帽、黑帽

    形态学处理 一 膨胀 二 腐蚀 三 开运算 四 闭运算 五 形态学梯度 六 顶帽 七 黑帽 形态学处理 一 膨胀  代码: #include <opencv2/core/core.hpp> ...

  10. 开运算和闭运算_OpenCV计算机视觉学习(5)——形态学处理(腐蚀膨胀,开闭运算,礼帽黑帽,边缘检测)...

    Fly-AI竞赛服务平台 flyai.com 在开始学习之前推荐大家可以多在FlyAI竞赛服务平台多参加训练和竞赛,以此来提升自己的能力.FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站 ...

最新文章

  1. python【力扣LeetCode算法题库】300 最长上升子序列(动态规划)
  2. Java基础 this关键字
  3. 上传到docker hub_docker 创建image上传到 docker hub并下载
  4. 看完你会为自己哭,或者为他们哭
  5. Asp.Net Core中Session使用
  6. VMware vCenter Converter Standalone 5.0的安装
  7. 12.混淆——数字音频采样,混淆,反混淆,脉冲序列_2
  8. (转)Nutz | Nutz项目整合Spring实战
  9. android listview添加数据_Android系统列表控件
  10. RTOS原理与实现07:邮箱实现
  11. 查看perl的模块版本
  12. 【渝粤教育】国家开放大学2018年春季 0248-22T电工电子技术 参考试题
  13. 十大著名黑客——斯蒂芬-沃兹尼克
  14. 解决Could not find org.jetbrains.kotlin:kotlin-stdlib-jre7:1.3.20问题
  15. mac 思科 链路聚合_链路聚合笔记
  16. 教你做Android逆向
  17. Python pyd文件的制作和编译,以及程序源代码的保护
  18. Linux服务器开发,手把手设计实现epoll
  19. 电脑桌面不见了怎么办?只能调出任务管理器!
  20. LibGDX QQ群建立,欢迎对libGDX有兴趣的程序员加入。

热门文章

  1. 26+富有创意且响应式的Drupal 7主题
  2. 三分钟搭建开源堡垒机JumpServer
  3. 【Linux】一种局域网内通信方法
  4. Android源代码分析之类方法与组件名词解释(持续更新)
  5. MySQL:备份类型:热备份、温备份、冷备份
  6. 【观察】亚信科技:“三新”收入再翻番背后,是全栈数智化能力的释放
  7. No cached version编译问题
  8. JSP mysql酒店预订系统
  9. 最全最通俗易懂的设计模式全集
  10. windows、虚拟机下的ubuntu、开发板即能ping通,又能上网的设置方法