图像形态学操作对比(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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/901299.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql 向Java的映射

优化建议&#xff0c;可以在SQL中控制它的类型 在 MyBatis 中&#xff0c;如果返回值类型设置为 java.util.Map&#xff0c;默认情况下可以返回 多行多列的数据

excel中的VBA指令示例(一)

示例注释&#xff1a; Sub 宏1() sub是宏开头&#xff0c;宏1是宏的名称&#xff0c;自定义&#xff0c;在按钮中可指定用某个宏 后面是注释 Sheets("装配材料").Select ‘选择表 装配材料 Ce…

【Linux C】简单bash设计

主要功能 循环提示用户输入命令&#xff08;minibash$&#xff09;。创建子进程&#xff08;fork()&#xff09;执行命令&#xff08;execlp&#xff09;。父进程等待子进程结束&#xff08;waitpid&#xff09;。关键问题 参数处理缺失&#xff1a;scanf("%s", buf)…

【vue】基础

一、vi-if 1.1基本使用 必须绑定大盒子包住的代码&#xff0c;使用id或者class都可以进行绑定 new Vue({ el:"#id" el:".class" }) 1.2v-if和v-show的区别 v-show会渲染&#xff0c;但是不显示&#xff0c;v-if不渲染不显示 1.3vue实例的作用范围 必须包…

【数据结构_5】链表(模拟实现以及leetcode上链表相关的题目)

书接上文&#xff0c;继续编写链表的功能 4.链表的中间插入 在链表中&#xff0c;本身是没有下标这样的概念的&#xff0c;不像顺序表&#xff0c;顺序表根据下标访问元素&#xff0c;O(1)复杂度。链表需要遍历之后找到正确的位置才能进行插入&#xff0c;为O&#xff08;N&a…

C语言的发展史

一、起源 C语言的起源可以追溯到20世纪60年代末期。其前身是BCPL&#xff08;Basic Combined Programming Language&#xff09;语言&#xff0c;由剑桥大学的Martin Richards于1967年在CPL语言的基础上简化而来。1970年&#xff0c;美国贝尔实验室的Ken Thompson以BCPL语言为…

深入解析栈式虚拟机与反向波兰表示法

1.1 什么是虚拟机&#xff1f; 虚拟机&#xff08;Virtual Machine, VM&#xff09;是一种软件实现的计算机系统&#xff0c;提供与物理计算机相类似的环境&#xff0c;但在软件层面运行。虚拟机的存在简化了跨平台兼容性、资源管理以及安全隔离等问题。 1.2 栈式虚拟机的架构…

ubuntu 系统安装Mysql

安装 mysql sudo apt update sudo apt install mysql-server 启动服务 sudo systemctl start mysql 设置为开机自启 sudo systemctl enable mysql 查看服务状态 &#xff08;看到类似“active (running)”的状态信息代表成功&#xff09; sudo systemctl status mysql …

《前端面试题之 CSS篇(第一集)》

目录 1、CSS的盒模型2、CSS选择器及其优先级3、隐藏元素的方法有那些4、px、em、rem的区别及使用场景5、重排、重绘有什么区别6、水平垂直居中的实现7、CSS中可继承与不可继承属性有哪些8、Sass、Less 是什么&#xff1f;为什么要使用他们&#xff1f;9、CSS预处理器/后处理器是…

HTTP:四.HTTP连接

HTTP(Hypertext Transfer Protocol)是一种用于传输超文本数据的应用层协议。它是互联网上最常用的协议,用于在客户端和服务器之间传输数据。HTTP协议通常用于从Web服务器传输网页和文件到客户端浏览器,并支持其他用途,如传输API数据和传输文件。 HTTP连接是指客户端向服务…

opencv 识别运动物体

import cv2 import numpy as npcap cv2.VideoCapture(video.mp4) try:import cv2backSub cv2.createBackgroundSubtractorMOG2() except AttributeError:backSub cv2.bgsegm.createBackgroundSubtractorMOG()#形态学kernel kernel cv2.getStructuringElement(cv2.MORPH_REC…

要查看 ​​指定 Pod 的资源限制(CPU/内存)

要查看 指定 Pod 的资源限制&#xff08;CPU/内存&#xff09;&#xff0c;可以通过以下 kubectl 命令实现&#xff1a; 1. 快速查看某个 Pod 的资源限制 kubectl get pod <pod-name> -o jsonpath{.spec.containers[*].resources} | jq输出示例&#xff1a; {"lim…

信息安全管理与评估广东省2023省赛正式赛题

任务1&#xff1a;网络平台搭建(60分) 题号 网络需求 1 根据网络拓扑图所示&#xff0c;按照IP地址参数表&#xff0c;对DCFW的名称、各接口IP地址进行配置。&#xff08;10分&#xff09; 2 根据网络拓扑图所示&#xff0c;按照IP地址参数表&#xff0c;对DCRS的名称进…

IBM Rational Software Architect安装感受及使用初体验

1 安装感受 最近准备用UML 2.0绘制模型图。在读UML创始人之一Grady Booch写的书《Object-Oriented Analysis and Design with Applications》&#xff08;第3版&#xff09;1时&#xff0c;发现书中用的UML工具之一为IBM Rational Software Architect&#xff08;RSA&#xff…

接听电话,手机靠近耳朵后拿开,挂断电话,设备自动锁屏

目录 一、问题分析/需求分析 二、解决方案 一、问题分析/需求分析 先说一下大致流程: 首先是打电话过程会启动PROXIMITY(接近光传感器)用于监听手机是否到耳边,当手机到耳边时进行灭屏处理,灭屏过程中会调用到锁屏,所以最终会导致锁屏 详细流程分析: 首先根据日志看…

21天Python计划:零障碍学语法(更新完毕)

目录 序号标题链接day1Python下载和开发工具介绍https://blog.csdn.net/XiaoRungen/article/details/146583769?spm1001.2014.3001.5501day2数据类型、字符编码、文件处理https://blog.csdn.net/XiaoRungen/article/details/146603325?spm1011.2415.3001.5331day3基础语法与…

Honor of Kings (S39) 13-win streak

Honor of Kings (S39) 13-win streak S39赛季13连胜&#xff0c;庄周&#xff0c;廉颇硬辅助&#xff0c;对面有回血就先出红莲斗盆&#xff0c;有遇到马克没带净化的&#xff0c;出【冰霜冲击】破他大招 S39&#xff0c;庄周廉颇前排硬辅助全肉全堆血13连胜_哔哩哔哩bilibi…

AI技术实战:从零搭建图像分类系统全流程详解

AI技术实战&#xff1a;从零搭建图像分类系统全流程详解 人工智能学习 https://www.captainbed.cn/ccc 前言 本文将以图像分类任务为切入点&#xff0c;手把手教你完成AI模型从数据准备到工业部署的全链路开发。通过一个完整的Kaggle猫狗分类项目&#xff08;代码兼容PyTorch…

NIPS2024论文 End-to-End Ontology Learning with Large Language Models

文章所谓的端到端本体学习&#xff0c;指的是从输入到目标本体这个完整过程。在很多其他文章中&#xff0c;是把本体学习这个任务肢解了来做的&#xff0c;同样也是肢解了之后评估。 文章号称的贡献&#xff0c;不但对通用本体学习提供所谓的baseline&#xff0c;而且还给出了验…

【NLP】18. Encoder 和 Decoder

1. Encoder 和 Decoder 概述 在序列到序列&#xff08;sequence-to-sequence&#xff0c;简称 seq2seq&#xff09;的模型中&#xff0c;整个系统通常分为两大部分&#xff1a;Encoder&#xff08;编码器&#xff09;和 Decoder&#xff08;解码器&#xff09;。 Encoder&…