树莓派4B_OpenCv学习笔记9:图片的腐蚀与膨胀
今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi)
本人所用树莓派4B 装载的系统与版本如下:
版本可用命令 (lsb_release -a) 查询:
Opencv 版本是4.5.1:
图像的膨胀与腐蚀一般用于灰度图或者二值图,今日便来学习一下
文章提供测试代码讲解,整体代码贴出、测试效果图、整体工程下载
目录
结构元素:
OpenCv图像腐蚀:
图像腐蚀的目的:
图像腐蚀的原理:
图像腐蚀的代码示例:
图像腐蚀的效果展示:
OpenCv图像膨胀:
图像膨胀的目的:
图像膨胀的原理:
图像膨胀的代码示例:
图像膨胀的相关展示:
整体代码与测试图片打包下载:
网上资料查阅:
结构元素:
结构元素是一个定义邻域内像素关系的矩阵,它决定了膨胀和腐蚀操作如何影响图像的像素。结构元素的形状和大小对操作结果有显著影响。
图像膨胀中的结构元素
- 作用:图像膨胀是通过将结构元素与图像进行逐像素的比较,只要结构元素与图像有任何一个相交的像素,输出图像对应像素即为前景(通常为白色),否则为背景(通常为黑色)。这可以使前景区域扩张,填充空洞和连接断裂的区域。
- 种类:结构元素的种类可以是正方形、十字形、椭圆形等。
- 尺寸:结构元素的尺寸大小可以用
Size ksize参数来指定,例如一个3x3的结构元素。- 中心点:结构元素的中心点位置可以用
Point anchor参数来指定,默认参数为结构元素的几何中心点。图像腐蚀中的结构元素
- 作用:图像腐蚀是通过将结构元素与图像进行逐像素的比较,只有当结构元素完全覆盖对应图像区域时,输出图像对应像素才为前景,否则为背景。这可以使前景区域缩小,去除细小的细节和孤立的像素。
- 种类与尺寸:结构元素的种类和尺寸与膨胀操作中的相同,可以是正方形、十字形、椭圆形等,尺寸大小可以用
Size ksize参数来指定。- 中心点:结构元素的中心点位置与膨胀操作中的相同,可以用
Point anchor参数来指定,默认参数为结构元素的几何中心点。
结构元素生成函数
在OpenCV中,可以使用
getStructuringElement()函数来生成图像形态学操作中常用的结构元素。该函数接受三个参数:
int shape:结构元素的种类,可以是矩形(MORPH_RECT)、椭圆形(MORPH_ELLIPSE)或交叉形(MORPH_CROSS)。Size ksize:结构元素的尺寸大小。Point anchor = Point(-1,-1):中心点的位置,默认参数为结构元素的几何中心点。
OpenCv图像腐蚀:
图像腐蚀的目的:
1、去除图像中微小物体
2、分离较近的俩个物体
3、减少一部分信息
图像腐蚀的原理:
- 原理描述:
- 腐蚀操作是通过一个结构元素(也称为卷积核或模板)对图像进行扫描,结构元素通常是一个小的矩形、十字形或椭圆形。
- 对于二值图像(只有0和1两种像素值),腐蚀操作是检查结构元素覆盖的图像区域,取这些像素值中的最小值来替换结构元素中心位置处的像素值。
- 由于在二值图像中,0通常代表黑色或背景,而1代表白色或前景,因此腐蚀操作实质上是一种“领域被蚕食”的过程,导致高亮区域(白色区域)变小。
- 操作过程:
- 定义一个结构元素(例如3x3的正方形),并指定一个锚点(通常位于结构元素的中心)。
- 将结构元素的锚点放置在图像的每个像素位置上,检查结构元素覆盖的图像区域。
- 取结构元素覆盖区域内所有像素的最小值,用这个最小值替换锚点位置处的像素值。
- 重复上述过程,直到扫描完整个图像。
- 效果与用途:
- 经过腐蚀操作后,图像中的高亮区域会变小,毛刺和孤立的像素点会被消除,从而提取出图像的主要信息。
- 腐蚀操作可以用于边缘检测,通过先膨胀后腐蚀可以使边缘更加明显。
- 它也可以用于去噪,通过一定次数的腐蚀操作可以消除二值图像中的噪声点或孤立的像素点。
- 参数与调整:
- 腐蚀操作的效果可以通过调整结构元素的大小、形状以及腐蚀的迭代次数来控制。
- 结构元素的大小和形状决定了腐蚀的邻域范围和形状。
- 迭代次数表示腐蚀操作的重复次数,次数越多,腐蚀效果越明显。
- OpenCV实现:
- 在OpenCV中,可以使用
cv2.erode()函数来实现腐蚀操作。- 该函数接受三个主要参数:输入图像、结构元素和迭代次数。
- 结构元素可以使用
cv2.getStructuringElement()函数来创建。

图像腐蚀的代码示例:
以下代码读取一张图片,先以127为阈值进行二值化处理得到二值图,在进行腐蚀得到腐蚀图的过程,每种操作都展示图片:
# coding: utf-8 import cv2 import numpy as np#创建窗口并调整大小:用于显示原图 cv2.namedWindow("Original image",cv2.WINDOW_NORMAL) cv2.resizeWindow("Original image",360,360) #创建窗口并调整大小:用于显示原图转化的二值图 cv2.namedWindow("Binary Image",cv2.WINDOW_NORMAL) cv2.resizeWindow("Binary Image",360,360) #创建窗口并调整大小:用于显示腐蚀后的样子 cv2.namedWindow("Eroded image",cv2.WINDOW_NORMAL) cv2.resizeWindow("Eroded image",360,360)#从指定目录读取一张图片 image=cv2.imread('/home/pi/Pictures/Eroded_image_test2.jpg',0) #定义腐蚀操作的结构元素 kernel=np.ones((2,2),np.uint8)#图像二值化处理:使用127作为阈值 _, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) #进行图像腐蚀操作(对二值图进行腐蚀),iterations表示腐蚀次数 eroded_image=cv2.erode(binary_image,kernel,iterations=1)while True:#显示原始图\二值图\腐蚀后的图cv2.imshow('Original image',image)cv2.imshow('Eroded image',eroded_image)cv2.imshow('Binary Image', binary_image) #等待按下‘q’退出key=cv2.waitKey(1)if key&0XFF==ord('q'):break #释放所有资源 cv2.destroyAllWindows()
图像腐蚀的效果展示:
这里提供了俩张图片进行腐蚀实验,一张白底黑字,一张黑底白字,名称分别是Eroded_image_test1.jpg和Eroded_image_test2.jpg,只需更改17行代码即可测试俩种图片
对于黑底白字的图像的腐蚀如下:
对于白底黑字的图像的腐蚀如下:
OpenCv图像膨胀:
图像膨胀的目的:
1、膨胀操作主要是使图像中高亮部分扩张,使得膨胀后的图像拥有比原图更大的高亮区域。
2、将有价值的信息放大
图像膨胀的原理:
膨胀过程:
- 膨胀的过程类似于卷积操作。使用一个结构元素(通常称为核或卷积核)在图像上滑动,并取结构元素覆盖区域的最大值来替换中心像素的值。
- 结构元素可以是正方形、十字形、圆形等形状,大小也可以根据需要进行调整。
膨胀的作用:
- 物体连接:当图像中的物体有一些小的断裂或缝隙时,膨胀操作有助于将它们连接成一个整体。
- 填充小孔:膨胀可以填充物体内的小孔或空洞,使物体更加连续。
- 增加物体大小:膨胀操作会扩大图像中的物体,这在需要增加物体大小或加强物体边缘时很有用。
- 去除小物体:膨胀可以用于去除图像中一些小的噪声或不相关的物体。通过膨胀操作,较小的物体可能会被合并到周围较大的物体中,从而减小图像中不必要的小结构。
- 去除噪声:对于二值图像中的噪声点或孤立的像素点,通过膨胀操作可以填充小的噪声点。
- 提取信息:通过膨胀和腐蚀操作可以提取文本区域或其他感兴趣的区域。
膨胀操作的参数:
- src:源图像,即要进行膨胀操作的图像。
- kernel:膨胀操作的结构元素,定义了膨胀操作的形状和大小。
- iterations:膨胀操作的迭代次数,即结构元素在图像上滑动的次数。较大的迭代次数会产生更明显的膨胀效果。
图像膨胀的代码示例:
以下代码读取一张图片,先以127为阈值进行二值化处理得到二值图,在进行膨胀得到膨胀图的过程,每种操作都展示图片:
# coding: utf-8 import cv2 import numpy as np#创建窗口并调整大小:用于显示原图 cv2.namedWindow("Original image",cv2.WINDOW_NORMAL) cv2.resizeWindow("Original image",360,360) #创建窗口并调整大小:用于显示原图转化的二值图 cv2.namedWindow("Binary Image",cv2.WINDOW_NORMAL) cv2.resizeWindow("Binary Image",360,360) #创建窗口并调整大小:用于显示膨胀后的样子 cv2.namedWindow("Dilated image",cv2.WINDOW_NORMAL) cv2.resizeWindow("Dilated image",360,360)#从指定目录读取一张图片 image=cv2.imread('/home/pi/Pictures/Dilate_image_test1.jpg',0) #定义膨胀操作的结构元素 kernel=np.ones((3,3),np.uint8)#图像二值化处理:使用127作为阈值 _, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) #进行图像膨胀操作(对二值图进行膨胀),iterations表示膨胀次数 dilated_image=cv2.dilate(binary_image,kernel,iterations=1)while True:#显示原始图\二值图\腐蚀后的图cv2.imshow('Original image',image)cv2.imshow('Dilated image',dilated_image)cv2.imshow('Binary Image', binary_image) #等待按下‘q’退出key=cv2.waitKey(1)if key&0XFF==ord('q'):break #释放所有资源 cv2.destroyAllWindows()
图像膨胀的相关展示:
这里提供了俩张图片进行腐蚀实验,一张白底黑字,一张黑底白字,名称分别是Dilate_image_test1.jpg和Dilate_image_test2.jpg,只需更改17行代码即可测试俩种图片
对于黑底白字的图像的膨胀如下:
对于白底黑字的图像的膨胀如下:
整体代码与测试图片打包下载:
https://download.csdn.net/download/qq_64257614/89437741
网上资料查阅:
图像的腐蚀与膨胀_腐蚀膨胀-CSDN博客
OpenCV(二十九):图像腐蚀_cv::getstructuringelement-CSDN博客
相关文章:
树莓派4B_OpenCv学习笔记9:图片的腐蚀与膨胀
今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1: 图像的膨胀与腐蚀一般用于灰度图或者二值图,今日便来学习…...
Perplexity AI — 探索网络,发掘知识,沟通思想
体验地址:Perplexity AI (国外网站访问需要梯子) Perplexity AI是一款功能强大的人工智能搜索引擎,其特点和优势主要体现在以下几个方面: 功能: 自然语言搜索:Perplexity AI可以理解用户的自然…...
RPC知识
一、为什么要有RPC: HTTP协议的接口,在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;优点就是简单、直接、开发方便,利用现成的HTTP协议进行传输。 但是,如果是一个大型的网…...
【爬虫】requests 结合 BeautifulSoup抓取网页数据
一、BeautifulSoup使用步骤 BeautifulSoup 是一个用于从 HTML 或 XML 文件中提取数据的 Python 库。以下是如何使用 BeautifulSoup 来解析 HTML 并提取信息的基本步骤: 1、安装: 如果你还没有安装 BeautifulSoup,你可以使用 pip 来安装它。…...
安全测试框架 二
使用安全测试框架进行测试,可以遵循以下步骤进行,以确保测试的全面性和系统性: 一、明确测试目标和需求 确定测试的范围和重点,明确要测试的系统或应用的安全性方面的关键点和重要性。根据业务需求和安全标准,制定详…...
安徽京准-NTP网络授时服务器助力助力甘南州公共资源交易
安徽京准-NTP网络授时服务器助力助力甘南州公共资源交易 安徽京准-NTP网络授时服务器助力助力甘南州公共资源交易 2024年5月中旬,我安徽京准科技生产研发的NTP时钟服务器成功投运甘南州公共资源交易中心,为该中心的计算机网络系统及其他各业务子系统提供…...
大数据—什么是大数据?
大数据是指所涉及的资料量规模巨大到无法透过主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。想要更加全面地了解大数据的概念,可以从以下几个维度进行介绍: 大数据的定义: 基本…...
德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第十一周) - 自然语言处理扩展研究
自然语言处理扩展研究 1. 多语言研究2. 语言锚定3. 伦理问题 1. 多语言研究 多语言(Multilinguality)是NLP的一个重要研究方向,旨在开发能够处理多种语言的模型和算法。由于不同语言在语法、词汇和语义结构上存在差异,这成为一个复杂且具有挑战性的研究…...
支持向量机(SVM)中核函数的本质意义
本质上在做什么? 内积是距离度量,核函数相当于将低维空间的距离映射到高维空间的距离,并非对特征直接映射。 为什么要求核函数是对称且Gram矩阵是半正定? 核函数对应某一特征空间的内积,要求①核函数对称;②…...
SpringBoot使用jasypt实现数据库信息的脱敏,以此来保护数据库的用户名username和密码password(容易上手,详细)
1.为什么要有这个需求? 一般当我们自己练习的时候,username和password直接是爆露出来的 假如别人路过你旁边时看到了你的数据库账号密码,他跑到他的电脑打开navicat直接就是一顿连接,直接疯狂删除你的数据库,那可就废…...
Python日志配置策略
1 三种情况下都能实现日志打印: 被库 A 调用,使用库 A 的日志配置。被库 B 调用,使用库 B 的日志配置。独立运行,使用自己的日志配置。 需要实现一个灵活的日志配置策略,使得日志记录器可以根据调用者或运行环境自动…...
想学编程,什么语言最好上手?
Python是许多初学者的首选,因为它的语法简洁易懂,而且有丰富的资源和社区支持。我这里有一套编程入门教程,不仅包含了详细的视频 讲解,项目实战。如果你渴望学习编程,不妨点个关注,给个评论222,…...
binlog和redolog有什么区别
在数据库管理系统中,binlog(binary log)和 redolog(redo log)是两种重要的日志机制,它们在数据持久性和故障恢复方面扮演着关键角色。虽然它们都用于记录数据库的变化,但它们的目的和使用方式有…...
Linux笔记--ubuntu文件目录+命令行介绍
文件目录 命令行介绍 当我们在ubuntu中命令行处理位置输入ls后会显示出其所有目录,那么处理这些命令的程序就是shell,它负责接收用户的输入,并根据输入找到其他程序并运行 命令行格式 linux的命令一般由三部分组成:command命令、…...
71、最长上升子序列II
最长上升子序列II 题目描述 给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。 输入格式 第一行包含整数N。 第二行包含N个整数,表示完整序列。 输出格式 输出一个整数,表示最大长度。 数据范围 1 ≤ N ≤ 100000…...
解决必剪电脑版导出视频缺斤少两的办法
背景 前几天将电脑重置了,今天想要剪辑一下视频,于是下载了必剪,将视频、音频都调整好,导出,结果15分钟的视频只能导出很短的时长,调整参数最多也只能导出10分钟,My God! 解决 首…...
新人学习笔记之(常量)
一、什么是常量 1.常量:在程序的执行过程中,其值不能发生改变的数据 二、常量的分类 常量类型说明举例整型常量整数、负数、0123 456实型常量所有带小数点的数字1.93 18.2字符常量单引号引起来的字母、数字、英文符号S B字符串常量双引号引起来的&…...
Lua解释器裁剪
本文目录 1、引言2、文件功能3、选择需要初始化的库4、结论 文章对应视频教程: 已更新。见下方 点击图片或链接访问我的B站主页~~~ Lua解释器裁剪,很简单~ 1、引言 在嵌入式中使用lua解释器,很多时候会面临资源紧张的情况。 同时,…...
web前端设计nav:深入探索导航栏设计的艺术与技术
web前端设计nav:深入探索导航栏设计的艺术与技术 在web前端设计中,导航栏(nav)扮演着至关重要的角色,它不仅是用户浏览网站的指引,更是网站整体设计的点睛之笔。本文将从四个方面、五个方面、六个方面和七…...
分析解读NCCL_SHM_Disable与NCCL_P2P_Disable
在NVIDIA的NCCL(NVIDIA Collective Communications Library)库中,NCCL_SHM_Disable 和 NCCL_P2P_Disable 是两个重要的环境变量,它们控制着NCCL在多GPU通信中的行为和使用的通信机制。下面是对这两个环境变量的详细解读࿱…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...









