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

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

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

1. 形态学操作

import cv2
import numpy as np
import matplotlib.pyplot as plotimg = 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 plotimg = 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)

相关文章:

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

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

复刻系列-星穹铁道 3.2 版本先行展示页

复刻星穹铁道 3.2 版本先行展示页 0. 视频 手搓&#xff5e;星穹铁道&#xff5e;展示页&#xff5e;&#xff5e;&#xff5e; 1. 基本信息 作者: 啊是特嗷桃系列: 复刻系列官方的网站: 《崩坏&#xff1a;星穹铁道》3.2版本「走过安眠地的花丛」专题展示页现已上线复刻的网…...

请你说一说测试用例的边界

一、什么是测试用例的边界? 边界是指输入、输出、状态或操作的极限条件,是系统行为可能发生变化的临界点。例如: 输入字段的最小值、最大值、空值、超长值; 循环的第0次、第1次、最后一次; 时间相关的闰年、月末、跨时区操作等。 边界测试的核心思想是:缺陷更容易出现在…...

Linux:进程理解1(查看进程,创造进程,进程状态)

进程理解 &#xff08;一&#xff09;查看进程通过系统调用获取进程标示* &#xff08;二&#xff09;创造进程&#xff08;fork&#xff09;1. 创造的子进程的PCB代码数据怎么来&#xff1f;2.一个函数为什么有两个返回值&#xff1f;3. 为什么这里会有 两个 id值&#xff1f;…...

异形遮罩之QML中的 `OpacityMask` 实战

文章目录 &#x1f327;️ 传统实现的问题&#x1f449; 效果图 &#x1f308; 使用 OpacityMask 的理想方案&#x1f449;代码如下&#x1f3af; 最终效果&#xff1a; ✨ 延伸应用&#x1f9e0; 总结 在 UI 设计中&#xff0c;经常希望实现一些“异形区域”拥有统一透明度或颜…...

如何为您的设计应用选择高速连接器

电气应用的设计过程需要考虑诸多因素&#xff0c;尤其是在设计高速网络时。许多连接器用户可能没有意识到&#xff0c;除了在两个互连之间组装导电线路之外&#xff0c;还需要考虑各种工艺。在建立高速连接并确保适当的信号完整性时&#xff0c;必须考虑蚀刻、公差、屏蔽等因素…...

mongodb 4.0+多文档事务的实现原理

1. 副本集事务实现&#xff08;4.0&#xff09;‌ ‌非严格依赖二阶段提交‌ MongoDB 4.0 在副本集环境中通过 ‌全局逻辑时钟&#xff08;Logical Clock&#xff09;‌ 和 ‌快照隔离&#xff08;Snapshot Isolation&#xff09;‌ 实现多文档事务&#xff0c;事务提交时通过…...

【论文阅读】UniAD: Planning-oriented Autonomous Driving

一、Introduction 传统的无人驾驶采用了区分子模块的设计&#xff0c;即将无人驾驶拆分为感知规划控制三个模块&#xff0c;这虽然能够让无人驾驶以一个很清晰的结构实现&#xff0c;但是感知的结果在传达到规划部分的时候&#xff0c;会导致部分信息丢失&#xff0c;这势必会…...

upload-labs二次打

1(前端js绕过) 弹窗&#xff0c;先看看有没有js有&#xff0c;禁用js 禁用后就可以上传php文件了&#xff0c;然后我们就去访问文件&#xff0c;成功 2&#xff08;MIME绕过&#xff09; 先上传一个php文件试试&#xff0c;不行&#xff0c;.htaccess不行, 试试MIME类型&am…...

Flutter命令行打包打不出ipa报错

Flutter打包ipa报错解决方案 在Flutter开发中&#xff0c;打包iOS应用时可能会遇到以下错误&#xff1a; error: exportArchive: The data couldn’t be read because it isn’ in the correct format. 或者 Encountered error while creating the IPA: error: exportArchive…...

网页制作中的MVC和MVT

MVC&#xff08;模型-视图-控制器&#xff09;和MVT&#xff08;模型-模板-视图&#xff09;是两种常见的软件架构模式&#xff0c;通常用于Web应用程序的设计。它们之间的主要区别在于各自的组件职责和工作方式。 MVC&#xff08;模型-视图-控制器&#xff09;&#xff1a; 模…...

C. Good Subarrays

time limit per test 2 seconds memory limit per test 256 megabytes You are given an array a1,a2,…,ana1,a2,…,an consisting of integers from 00 to 99. A subarray al,al1,al2,…,ar−1,aral,al1,al2,…,ar−1,ar is good if the sum of elements of this subarra…...

聊天室项目day4(redis实现验证码期限,实现redis连接池)

1.redis连接池操作和之前所学过的io_context连接池原理一样这里不多赘述&#xff0c;也是创建多个连接&#xff0c;使用时按顺序取出来。 2.知识补充redisConnect()函数建立与 Redis 服务器的非阻塞网络连接&#xff0c;成功返回 redisContext*&#xff08;连接上下文指针&…...

提交至git

通过 Pull Request 提交代码 如果你无法直接推送到 master 分支&#xff08;例如&#xff0c;因为分支保护或权限限制&#xff09;&#xff0c;通常的做法是将代码推送到一个新分支&#xff0c;并通过 Pull Request&#xff08;或 Merge Request&#xff09;提交代码&#xff1…...

0x06.Redis 中常见的数据类型有哪些?

回答重点 Redis 常见的数据结构主要有五种,这五种类型分别为:String(字符串)、List(列表)、Hash、Set(集合)、Zset(有序集合,也叫sorted set)。 String 字符串是Redis中最基本的数据类型,可以存储任何类型的数据,包括文本、数字和二进制数据。它的最大长度为512MB。 使…...

如何查看自己 Android App 的私有数据?从 `adb backup` 到数据提取全过程

&#x1f6e0;️ 如何查看自己 Android App 的私有数据&#xff1f;从 adb backup 到数据提取全过程 &#x1f4cc; 前言&#xff1a;作为一名 Android 开发者&#xff0c;我常常想知道自己写的 App 在用户设备上的数据存储结构是怎样的&#xff0c;比如有没有数据写入成功、有…...

提权实战!

就是提升权限&#xff0c;当我们拿到一个shell权限较低&#xff0c;当满足MySQL提权的要求时&#xff0c;就可以进行这个提权。 MySQL数据库提权&#xff08;Privilege Escalation&#xff09;是指攻击者通过技术手段&#xff0c;从低权限的数据库用户提升到更高权限&#xff…...

Vue使用el-table给每一行数据上面增加一行自定义合并行

// template <template><el-table:data"flattenedData":span-method"objectSpanMethod"borderclass"custom-header-table"style"width: 100%"ref"myTable":height"60vh"><!-- 订单详情列 -->&l…...

ChromeOS 135 版本更新

ChromeOS 135 版本更新 一、ChromeOS 135 更新内容 1. ChromeOS 电池寿命优化策略 为了延长 Chromebook 的使用寿命&#xff0c;ChromeOS 135 引入了一项全新的电池充电限制策略 —— DevicePowerBatteryChargingOptimization&#xff0c;可提供更多充电优化选项&#xff0c…...

国内协作机器手焊接领域领军人物分析

国内焊接协作机器手领域的专家涵盖学术界与产业界,他们在核心技术研发、行业标准制定及重大工程应用中发挥关键作用。以下从技术方向、行业贡献、典型案例三个维度展开分析: 一、学术界领军人物:理论创新与技术突破 1. 吴林(哈尔滨工业大学) 学术地位:中国焊接学会名誉…...

javaSE.Lambda表达式

如果一个接口中有且只有一个待实现的抽象方法&#xff0c;那么我们可以将匿名内部类简写为Lambda表达式。 简写规则 标准格式&#xff1a; &#xff08;【参数类型 参数名称&#xff0c;】...&#xff09; -> {代码语句&#xff0c; 包括返回值} 只有一行花括号{}可以省略。…...

【随身wifi】青龙面板保姆级教程

0.操作前必看 本教程基于Debian系统&#xff0c;从Docker环境。面板安装&#xff0c;到最后拉取脚本的使用。 可以拉库跑狗东京豆&#xff0c;elm红包等等&#xff0c;也可以跑写自己写的脚本&#xff0c;自行探索 重要的号别搞&#xff0c;容易黑号&#xff0c;黑号自己负责…...

Android 之美国关税问题导致 GitHub 403 无法正常访问,责任在谁?

这几天各国关税问题导致世界动荡不安&#xff0c;如今GitHub又无法正常访问&#xff0c;是不是Google到时候也无法正常使用了。...

深入解析 Android 图形系统:Canvas、Skia、OpenGL 与 SurfaceFlinger 的协作

在 Android 应用开发中&#xff0c;流畅的 UI 渲染是用户体验的核心。但你是否好奇&#xff0c;一个简单的 View 是如何从代码中的 onDraw() 方法一步步变成屏幕上的像素的&#xff1f;本文将从底层图形系统的视角&#xff0c;解析 Android 中 Canvas、Skia、OpenGL ES 和 Surf…...

4月13日星期日早报简报微语报早读

4月13日星期日&#xff0c;农历三月十六&#xff0c;早报#微语早读。 1、北京处置倒伏树木843棵&#xff0c;已全部处置完毕&#xff1b; 2、山西大同“订婚强奸案”本月16日二审宣判&#xff0c;一审男方被判3年刑&#xff1b; 3、今年我国快递业务量已突破500亿件&#xf…...

动态路由, RIP路由协议,RIPv1,RIPv2

动态路由 1、回顾 路由&#xff1a;从源主机到目标主机的过程 源主机发送数据给目标主机&#xff0c;源主机会查看自身的路由信息 如果目标主机是自己同网段&#xff0c;源主机查看的是直连路由 如果目标主机和自己不同网段&#xff0c;源主机查看的是静态路由、动态路由、默…...

【已更新完毕】2025泰迪杯数据挖掘竞赛B题数学建模思路代码文章教学:基于穿戴装备的身体活动监测

基于穿戴装备的身体活动监测 摘要 本研究基于加速度计采集的活动数据&#xff0c;旨在分析和统计100名志愿者在不同身体活动类别下的时长分布。通过对加速度数据的处理&#xff0c;活动被划分为睡眠、静态活动、低强度、中等强度和高强度五类&#xff0c;进而计算每个志愿者在…...

212、【图论】字符串接龙(Python)

题目描述 题目链接&#xff1a;110. 字符串接龙 代码实现 import collectionsn int(input()) beginStr, endStr input().split() strList [input() for _ in range(n)]deque collections.deque() # 使用队列遍历结点 deque.append([beginStr, 1]) # 存储当前字符串和遍…...

车载以太网-TLS

文章目录 车载以太网与TLS的技术背景核心定位车载以太网TLS的技术架构车载TLS的核心安全机制TLS报文结构详解TLS工作机制密钥交换与计算流程标题完整握手流程(1-RTT)数据传输加密流程车载TLS的独特优化策略车载TLS的安全威胁相关标准车载以太网TLS(Transport Layer Security…...

大模型面经 | 手撕多头注意力机制(Multi-Head Attention)

大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…...