树莓派4B_OpenCv学习笔记9:图片的腐蚀与膨胀

今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi)

 本人所用树莓派4B 装载的系统与版本如下:

 版本可用命令 (lsb_release -a) 查询:

 Opencv 版本是4.5.1:

图像的膨胀与腐蚀一般用于灰度图或者二值图,今日便来学习一下

文章提供测试代码讲解,整体代码贴出、测试效果图、整体工程下载

目录

结构元素:

OpenCv图像腐蚀:

图像腐蚀的目的:

 图像腐蚀的原理:

图像腐蚀的代码示例:

图像腐蚀的效果展示:

OpenCv图像膨胀:

图像膨胀的目的:

图像膨胀的原理:

图像膨胀的代码示例:

图像膨胀的相关展示:

整体代码与测试图片打包下载:

网上资料查阅:


结构元素:

结构元素是一个定义邻域内像素关系的矩阵,它决定了膨胀和腐蚀操作如何影响图像的像素。结构元素的形状和大小对操作结果有显著影响。

图像膨胀中的结构元素

  1. 作用:图像膨胀是通过将结构元素与图像进行逐像素的比较,只要结构元素与图像有任何一个相交的像素,输出图像对应像素即为前景(通常为白色),否则为背景(通常为黑色)。这可以使前景区域扩张,填充空洞和连接断裂的区域。
  2. 种类:结构元素的种类可以是正方形、十字形、椭圆形等。
  3. 尺寸:结构元素的尺寸大小可以用Size ksize参数来指定,例如一个3x3的结构元素。
  4. 中心点:结构元素的中心点位置可以用Point anchor参数来指定,默认参数为结构元素的几何中心点。

图像腐蚀中的结构元素

  1. 作用:图像腐蚀是通过将结构元素与图像进行逐像素的比较,只有当结构元素完全覆盖对应图像区域时,输出图像对应像素才为前景,否则为背景。这可以使前景区域缩小,去除细小的细节和孤立的像素。
  2. 种类与尺寸:结构元素的种类和尺寸与膨胀操作中的相同,可以是正方形、十字形、椭圆形等,尺寸大小可以用Size ksize参数来指定。
  3. 中心点:结构元素的中心点位置与膨胀操作中的相同,可以用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博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

头歌资源库(13)背包问题

一、 问题描述 二、算法思想 这是一个背包问题,可以使用动态规划算法来解决。具体思路如下: 定义一个二维数组dp,dp[i][j]表示前i个物品在背包容量为j时能获取的最大价值。初始化dp数组的第一行和第一列为0,表示当只有一个物品或…

这13个常用电路基础公式,每一位电子工程师都要牢记

计算电阻电路中电流、电压、电阻和功率之间的关系。 欧姆定律解释了电压、电流和电阻之间的关系,即通过导体两点间的电流与这两点间的电势差成正比。说明两点间的电压差、流经该两点的电流和该电流路径电阻之间关系的定律。该定律的数学表达式为V IR,其中…

Qt调用第三方库的通用方式(静态链接库.a或.lib、动态链接库.dll)

目录 一、前提 二、如何引用静态链接库 三、如何引用动态链接库 四、示例代码资源 在开发项目中经常会存在需要调用第三方库的时候,对于Qt如何来调用第三方库,为了方便自己特意记录下详细过程。 一、前提 1. window 10操作系统 2. 已安装了Qt6.7.…

申万宏源:消费税改或是财政改革第一枪

消费税征收环节后移可能带来年化千亿的税收收入增长,地方财政压力的缓和程度取决于中央确定保留的消费税基数。申万宏源认为,财政改革不仅仅只涉及消费税和央地分配,而稳定扩大需求才是下一步改革核心。 主要内容 财政现实呼唤改革。紧迫性…

改进位删除谜题的求解方法

问题背景 给定长度为 n 的二进制向量,如何删除恰好 n/3 个位,使剩余二进制向量的不同数量最小化。该问题被称为“位删除谜题”。 以下是该问题的示例: 对于 n 3 的情况,最优解是 2,对应两个不同的向量 11 和 00。对…

python pytest 参数化的几种方式

一、使用pytest.mark.parametrize装饰器: 可以使用pytest提供的pytest.mark.parametrize装饰器来指定参数化测试的参数。下面是一个示例: import pytest# pytest.mark.parametrize装饰器 # 其中num expected,分别对应(1, 1),(2, 4),(3, 9)&…

JLINK调试妙用----读写flash

JLINK调试妙用----读写flash 前言 随着对jlink使用频率的增加,越发觉得它太强大了,可以满足好多调试功能,现在已经用的就是J-flash(程序下载)、RTT(日志打印)和J-flash SPI(读写spi类…

从零基础到学完CCIE要多久?

思科认证的CCIE是网络工程师追求的顶级认证之一。 对于刚入门的初学者来说,从零基础到通过CCIE认证,这条路需要多长时间? 这个问题的答案因人而异,取决于多种因素。 这不仅是一个关于时间的问题,更是一个关于规划、学习…

芯片验证 | FPGA 原型验证

更多完整内容访问:【芯片验证 | FPGA 原型验证】

Debian12安装Nvidia官方驱动

1、下载驱动(下载到一个英文目录例如你的用户目录/home/用户名下,我下载到dowload目录,由于默认显示中文,在命令行不支持中文显示的是一串数字,当然你仍然可以cd 那串数字进目录,显示有有引号就加引号&…

聚四氟乙烯提取瓶2L固废浸提用PTFE大口瓶适配FZ-4翻转震荡器

聚四氟乙烯广口瓶的口径较大,我司采用“直上直下”的样式设计,方便样品的存放和拿取。瓶身内壁平滑,,易清洗。瓶口是螺纹口设计,保证很好的密封性。聚四氟乙烯广口瓶特性:1.耐高低温:-200至250℃…

业务谈判的过程中多让客户做选择

之前还在工厂的时候,开分享会,经理会反复强调的一个跟进思路就是一定要学会让客户跟着我们的节奏走,而不是被客户牵着鼻子走。 前者会让客户顺着我们设计好的谈判路径,把客户引导到我们想要的结果上,业务员是主动角色…

ShokoServer /api/Image/withpath/ 任意文件读取漏洞复现(CVE-2023-43662)

0x01 产品简介 ShokoServer是一款高性能、可扩展的服务器软件,专为满足现代数据管理和处理需求而设计。它采用先进的架构和算法,提供稳定、可靠的数据存储、查询和分析服务,适用于各种规模和类型的应用场景。 0x02 漏洞概述 ShokoServer /…

人力资源招聘社会校企类型招聘系统校园招聘小程序

校企社会人力资源招聘小程序:开启高效招聘新时代 🚀开篇:打破传统,开启招聘新篇章 在快速发展的现代社会,人力资源招聘已经成为企业和学校共同关注的重要议题。为了更高效、便捷地满足双方的招聘需求,一款…

车载语音识别系统语音数据采集标注案例

随着人工智能技术的不断发展,其在我们日常生活工作场景中的应用也越来越普及,人工智能技术在不同场景的普及大大的提高了我们日常生活、工作的高效性和便利性。以我们的日常出行为例,车载语音识别系统便是一种典型的人工智能应用场景。 车载…

Golang的Gin框架

目录 功能以及简单使用 gin.Engine数据结构 RouterGroup methodTrees gin.context 功能以及简单使用 功能: • 支持中间件操作( handlersChain 机制 ) • 更方便的使用( gin.Context ) • 更强大的路由解析能力&#xff08…

压缩pdf文件大小,如何压缩pdf

压缩PDF文件是现代办公中常见的需求,因为PDF文件往往包含了大量的图片、文本和格式信息,导致文件体积较大,不利于传输和存储。本文将详细介绍如何压缩PDF文件,我们一起来看一下。 浏览器打开 "轻云处理pdf官网" &#x…

同三维T80002JEHV H.265高清解码器

同三维T80002JEHV H.265高清解码器 1路HDMI1路VGA解码输出,1/2/4画面分割或16路轮询显示 产品简介: 同三维T80002JEHV解码器使用Linux系统,支持VGA/HDMI二种接口同时输出,支持多流输入多流解码及多屏显示,具有完善的…

删除重复文件如何操作?电脑重复文件删除教程分享:详细!高效!

在数字化时代,我们的电脑中往往存储着大量的文件,这些文件随着时间的推移可能会产生许多重复项。重复文件不仅占用了宝贵的硬盘空间,还可能导致文件管理的混乱。因此,定期删除重复文件是维护电脑健康和提高工作效率的重要步骤。本…

穿越时空的家书——黑夫与惊的不朽传奇

1975年,湖北云梦县睡虎地的一次考古发掘,揭开了一段尘封的历史,两枚刻有527个字的木牍,成为了我国最早的家书实物。这两枚木牍,记录了战国时期秦国士兵黑夫和惊的家书。 两件木犊出土时被放置在墓地陪葬器物箱子里的中…