当前位置: 首页 > news >正文

图像形态学操作对比(Opencv)

形态学基于图像的形状进行操作,用于处理二值化图像,主要包括腐蚀和膨胀两种基本操作。这些操作通常用于去除噪声、分隔或连接相邻的元素以及寻找图像中显著的最大点和最小点。

1. 形态学操作

import cv2
import numpy as np
import matplotlib.pyplot as plot

img = cv2.imread("tmp.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel = np.ones((5,5), np.uint8)
img_e = cv2.erode(img, kernel)
img_d = cv2.dilate(img, kernel)

plot.figure(figsize=(12,4));
plot.subplot(1,3,1)
plot.title('source image')
plot.imshow(img)
plot.subplot(1,3,2)
plot.title('erosion')
plot.imshow(img_e)
plot.subplot(1,3,3)
plot.title('dilation')
plot.imshow(img_d)

plot.show()

在这里插入图片描述

2. 概念简述

2.1 腐蚀(Erosion)

  • 基本原理:腐蚀操作会将图像中的前景区域进行“侵蚀”,缩小物体的边界。核(kernel)会扫描图像的每个像素,如果核覆盖区域的所有像素值都是前景,则该像素保持不变;否则,它将被腐蚀成背景。因此,腐蚀可以有效去除图像中的小细节,比如孤立的噪声点。
  • 应用场景:
    • 去除噪声:腐蚀常用于消除图像中的孤立噪声点或小块不需要的细节。
    • 分割连接物体:腐蚀可以用于分离连接较紧密的物体,例如两个接触的物体。

2.2 膨胀(Dilation)

  • 基本原理:膨胀操作是腐蚀的反向操作,它通过扩展物体的边界来增加前景区域的面积。核(kernel)扫描图像时,如果核覆盖区域有一个或多个前景像素,那么该像素就会被膨胀为前景。因此,膨胀操作会使物体变大,并且可以填充前景区域中的小空隙或“洞”。
  • 应用场景:
    • 增强物体边界:膨胀通常用于在边界模糊的物体中增强边缘,使得物体更加明显。
    • 连接断开的部分:膨胀可以用于连接图像中断开的物体,如中断的线条、文字或其他形状。

2.3 腐蚀与膨胀的结合

腐蚀和膨胀通常结合使用,形成了多种形态学操作:

  • 开运算(Opening):先腐蚀后膨胀,常用于去除小物体或噪声,但保留物体整体结构。
  • 闭运算(Closing):先膨胀后腐蚀,常用于填充物体内部的小空洞,平滑物体边缘。
  • 形态学梯度:通过膨胀和腐蚀之间的差异,提取图像边缘

3. 开闭运算

import cv2
import numpy as np
import matplotlib.pyplot as plot

img = cv2.imread("tmp.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
kernel = np.ones((5,5), np.uint8)
img_op = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
img_cl = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
img_gr = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

plot.figure(figsize=(16,4));
plot.subplot(1,4,1)
plot.title('source image')
plot.imshow(img)
plot.subplot(1,4,2)
plot.title('Open')
plot.imshow(img_op)
plot.subplot(1,4,3)
plot.title('Close')
plot.imshow(img_cl)
plot.subplot(1,4,4)
plot.title('Gradient')
plot.imshow(img_gr)

plot.show()

在这里插入图片描述

4. Matplotlib显示函数对比

4.1 plot

绘制x,y的一元方程的函数关系图
plot ([x], y, [fmt], **kwargs)

  • [x]:横坐标轴数据,可选参数
  • y:纵坐标轴数据
  • [fmt] :定义图形的基本样式:颜色,点型,线型
  • **Kwargs:不定长的关键字参数,用字典形式设置图形的其他属性,或者重复x,y,fmt用于多条线同时显示

[fmt] 具体形式 ‘[颜色][标记][线型]’,是一个字符串来定义图的基本属性,详细分解如下:

颜色参数颜色含义
bblue 蓝
ggreen 绿
'rred 红
ccyan 蓝绿
mmagenta 洋红
yyellow 黄
kblack 黑
wwhite 白
标记参数标记含义
.点标记
,像素标记
o圆圈标记
v倒三角标记
^正三角标记
<左三角标记
>右三角标记
1朝下三角标记
2朝上三角标记
3朝左三角标记
4朝右三角标记
s方形标记
p五角形标记
*星形标记
h六边形标记1
H六边形标记2
+加号标记
x乘号标记
D钻石标记
d瘦钻石标记
|竖线标记
_水平线标记

在这里插入图片描述

线型参数线型含义
-实线
- -虚线
-.点画线
:点线

4.2 imshow

创建图像对象并配置其属性,但不会显示图像
imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, shape=None, filternorm=1, filterrad=4.0, imlim=None, resample=None, url=None, *, data=None, **kwargs):

  • X:输入数据。可以是二维数组、三维数组、PIL图像对象、matplotlib路径对象等。
  • cmap:颜色映射。用于控制图像中不同数值所对应的颜色。可以选择内置的颜色映射,如gray、hot、jet等,也可以自定义颜色映射。
  • norm:用于控制数值的归一化方式。可以选择Normalize、LogNorm等归一化方法。
  • aspect:控制图像纵横比(aspect ratio)。可以设置为auto或一个数字。
  • interpolation:插值方法。用于控制图像的平滑程度和细节程度。可以选择nearest、bilinear、bicubic等插值方法。
  • alpha:图像透明度。取值范围为0~1。
  • origin:坐标轴原点的位置。可以设置为upper或lower。
  • extent:控制显示的数据范围。可以设置为[xmin, xmax, ymin, ymax]。
  • vmin、vmax:控制颜色映射的值域范围。
  • filternorm 和 filterrad:用于图像滤波的对象。可以设置为None、antigrain、freetype等。
  • imlim: 用于指定图像显示范围。
  • resample:用于指定图像重采样方式。
  • url:用于指定图像链接。

4.3 显示图像

show
实际上显示所有已经配置好的图形,包括由 imshow 创建的图像,具体步骤概述如下:

  1. 导入Matplotlib库:import matplotlib.pyplot as plt
  2. 创建图形对象:fig = plt.figure()
  3. 绘制图形:使用Matplotlib提供的绘图函数进行绘制,例如plt.plot(y)绘制折线, plt.imshow((x,y))绘制图像等
  4. 调用show()函数显示图形:plt.show()

系列文章:

  1. opencv常用边缘检测算子示例
  2. 图像颜色空间对比(Opencv)
  3. 图像变换方式区别对比(Opencv)
  4. 常用图像滤波及色彩调节操作(Opencv)
  5. 图像形态学操作对比(Opencv)

相关文章:

  • VSCode中选择Anaconda的Python环境
  • java数组06:Arrays类
  • 数据结构--线性表
  • 让你方便快捷实现主题色切换(useCssVar)
  • 【征程 6】工具链 VP 示例中 Cmakelists 解读
  • 创建虚拟环境无法加载到pycharm当conda环境,只能为python环境
  • C语言-字符串操作函数手册:语法、技巧与经典应用
  • FreeRTOS使任务处于挂起态的API
  • 小白学习java第11天(下):多线程详解
  • MergeX亮相GTC2025:开启全球广告流量交易新篇章
  • ​asm汇编源代码之-汉字点阵字库显示程序源代码下载​
  • JAVA——初识JAVA
  • Java学习手册:Java异常处理机制
  • 前端防御性编程
  • java数组08:稀疏数组
  • 【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】【论文篇+改进】A题解题全流程(持续更新)
  • 高并发秒杀系统如何锁住库存
  • C语言数字图像处理---Gabor滤波器
  • JAVA学习-练习试用Java实现“实现一个Java程序,对大数据集中的数据进行类型转换”
  • 关于 C++ 中 cin 对象和 EOF 的详细解释
  • 六盘水市网站建设/网站开发用什么语言
  • wordpress网站重定向/长沙百度快速优化排名
  • 长沙seo行者seo09/免费seo网站自动推广
  • 当地政府网站建设问卷调查/青岛seo推广
  • 有没有做皮艺的网站/官网seo关键词排名系统
  • 建设专业网站哪家更专业/南京seo排名优化