【去毛刺】OpenCV图像处理基础:腐蚀与膨胀操作入门

在数字图像处理中,形态学操作是一种常用的技术,用于提取图像中的特定形状或特征。其中,腐蚀(Erosion)和膨胀(Dilation)是两种基本的形态学运算。本文将通过一个简单的例子来演示如何使用Python中的OpenCV库执行这些操作,并展示其效果。

1. 环境准备

首先确保已经安装了opencv-python库。如果尚未安装,可以通过pip命令进行安装:

pip install opencv-python

此外,还需要NumPy库来进行数组操作,通常安装OpenCV时会自动安装此库,但也可以单独安装:

pip install numpy
2. 加载图像

开始之前,我们需要加载一张待处理的图片。这里使用的是路径F:/2024/Python/demo1/test1/ty.png下的图像文件。

import cv2
import numpy as np# 读取图像
img = cv2.imread('F:/2024/Python/demo1/test1/ty.png')
cv2.imshow('Original Image', img)  # 显示原始图像
3. 腐蚀操作

腐蚀是一种可以去除物体边界点的操作,它能够缩小前景区域。我们定义了一个3x3大小的结构元素(kernel),并使用cv2.erode()函数对图像执行一次腐蚀操作。

f_with = 3  # 定义腐蚀核的宽度
kernel = np.ones((f_with, f_with), np.uint8)  # 创建一个3x3的全1矩阵作为核
img_eroded = cv2.erode(img, kernel, iterations=1)  # 对图像进行腐蚀
cv2.imshow('Eroded Image1', img_eroded)  # 显示腐蚀后的图像
4. 膨胀操作

膨胀则是腐蚀的逆过程,它可以增加前景区域的大小。同样地,我们利用相同的核对经过腐蚀处理后的图像进行膨胀操作。

# 第一次膨胀
img_dilated = cv2.dilate(img_eroded, kernel, iterations=1)
cv2.imshow("dilate image1", img_dilated)# 第二次膨胀
img_dilated = cv2.dilate(img_eroded, kernel, iterations=2)
cv2.imshow("dilate image2", img_dilated)

 完整代码

import cv2
import numpy as np
img = cv2.imread('F:/2024/Python/demo1/test1/ty.png')cv2.imshow('Original Image', img) # 腐蚀操作
f_with = 3  # 腐蚀操作的宽度
kernel = np.ones((f_with, f_with), np.uint8)  # 定义一个5x5的结构元素
img_eroded = cv2.erode(img, kernel, iterations=1)  # 进行腐蚀操作cv2.imshow('Eroded Image1', img_eroded)  # 显示腐蚀处理后的图片# 膨胀操作kernel = np.ones((f_with, f_with), np.uint8)  # 定义一个5x5的结构元素
img_dilated = cv2.dilate(img_eroded, kernel, iterations=1)  # 进行膨胀操作
cv2.imshow("dilate image1",img_dilated)img_dilated = cv2.dilate(img_eroded, kernel, iterations=2)  # 进行膨胀操作
cv2.imshow("dilate image2",img_dilated)cv2.waitKey(0)            # 等待按键
cv2.destroyAllWindows()   # 关闭所有窗口
5. 结果展示

运行上述代码后,你将看到原始图像、腐蚀后的图像以及两次不同迭代次数膨胀后的结果。这有助于理解腐蚀与膨胀是如何改变图像边界的。

6. 结论

通过这个简单的实例,我们可以观察到腐蚀和膨胀对于图像边缘的影响。它们不仅可用于噪声去除,还可以帮助识别和增强图像中的特定特征。尝试调整核的大小和迭代次数,探索更多可能性!

最后不要忘记关闭所有打开的窗口以清理资源:

cv2.waitKey(0)
cv2.destroyAllWindows()

希望这篇文章能为你提供一些关于如何使用OpenCV进行基本图像处理的见解。继续探索更多高级功能吧!

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

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

相关文章

2024年11月27日Github流行趋势

项目名称:screenshot-to-code 项目维护者:abi clean99 sweep-ai kachbit vagusX项目介绍:通过上传截图将其转换为整洁的代码(支持HTML/Tailwind/React/Vue)。项目star数:62,429项目fork数:7,614…

Linux八股积累与笔记

1、iptables 是一个用于配置Linux内核防火墙规则的工具。四表五链:在iptables中,有四个表(tables)和五个链(chains),用于管理不同类型的数据包过滤规则。如下: 表(Tabl…

Qt5.14.2的安装与环境变量及一些依赖库的配置

目录 1.Qt5.14.2安装 2.Qt环境变量及一些依赖库的配置 1.Qt5.14.2安装 QT从入门到入土(一)——Qt5.14.2安装教程和VS2019环境配置 - 唯有自己强大 - 博客园 2.Qt环境变量及一些依赖库的配置 假设QT安装目录为: D:\Qt\Qt5.14.2 将目录: D:\Qt\Qt5.14.…

CTF之密码学(培根密码)

培根密码,又名倍康尼密码(Bacons cipher),是由法兰西斯培根发明的一种隐写术,属于密码学领域的一种替换密码。以下是关于培根密码的详细介绍: 一、原理 培根密码本质上是一种二进制密码,但它没…

初识Linux(4):Linux基础环境工具(下)

1. Git Git是一种版本控制系统,是一种工具,用于代码的存储和版本控制。 而我们常见的Gitee和Gitehub都是基于Git(Git是开源的)实现的在线代码仓库,而前者服务器位于中国,后者服务器位于美国。 总的来说&…

12.Three.js纹理动画与动效墙案例

12.Three.js纹理动画与动效墙案例 在Three.js的数字孪生场景应用中,我们通常会使用到一些动画渲染效果,如动效墙,飞线、雷达等等,今天主要了解一下其中一种动画渲染效果:纹理动画。下面实现以下动效墙效果&#xff08…

node.js中实现MySQL的增量备份

有时候,我们需要对生产库进行备份,不要求实时性很高,大概每天一次就行,为性能考虑,只备份最新更改内容,即增量备份即可,这种场景下对DB的设计和备份语句有所要求。 首先要求按源表各字段定义目标…

《白帽子讲Web安全》13-14章

《白帽子讲Web安全》13-14章 《白帽子讲Web安全》13-14章13、应用层拒绝服务攻击13.1、DDOS简介13.2、应用层DDOS13.2.1、CC攻击13.2.2、限制请求频率13.2.3、道高一尺,魔高一丈 13.3、验证码的那些事儿13.4、防御应用层DDOS13.5、资源耗尽攻击13.5.1、Slowloris攻击…

【电子元器件】Nand Flash基础介绍

本文章是笔者理论结合实践进行整理的备忘笔记。希望在帮助自己温习避免遗忘的同时,也能帮助其他需要参考的朋友。如有谬误,欢迎大家进行指正。 一、什么是Nand Flash Flash主要分两种,Nand Flash和Nor flash。 Nor的成本相对高&#xff0c…

JVM_垃圾收集器详解

1、 前言 JVM就是Java虚拟机,说白了就是为了屏蔽底层操作系统的不一致而设计出来的一个虚拟机,让用户更加专注上层,而不用在乎下层的一个产品。这就是JVM的跨平台,一次编译,到处运行。 而JVM中的核心功能其实就是自动…

python除了熟悉的pandas,openpyxl库也很方便的支持编辑Excel表

excel表格是大家经常用到的文件格式,各行各业都会跟它打交道。之前文章我们介绍了使用openpyxl和xlrd库读取excel表数据,使用xlwt库创建和编辑excel表,在办公自动化方面可以方便我们快速处理数据,帮助我们提升效率。 python之open…

网络知识1-TCP/IP模型

从用户端到服务端,tcp/ip模型可分为应用层、传输层、网络层、网络接口层 以下使用寄快递为例进行解释 应用层职责: 只关注与为用户提供应用功能,如HTTP、FTP、telnet、DNS、SMTP等 ,应用层的职责就像我们寄快递时将快递给快递员…

机器学习(二十五):决策树算法以及决策树和神经网络的对比

一、决策树集合 单一决策树会对训练数据的变化很敏感。例子:输入十个数据,判断是否是猫。只替换其中一个数据,信息增益最高的分裂特征就发生了改变,决策树就发生了变化。 使用决策树集合可以使算法更加健壮。例子:使用…

通俗理解人工智能、机器学习和深度学习的关系

最近几年人工智能成为极其热门的概念和话题,可以说彻底出圈了。但人工智能的概念在1955年就提出来了,可以说非常古老。我在上小学的时候《科学》课本上就有人工智能的概念介绍,至今还有印象,但那些年AI正处于“寒冬”,…

CDAF / PDAF 原理 | PDAF、CDAF 和 LAAF 对比 | 图像清晰度评价指标

注:本文为 “CDAF / PDAF 原理 | PDAF、CDAF 和 LAAF 对比 | 图像清晰度评价指标” 几篇相关文章合辑。 文章中部分超链接、图片异常受引用之前的原文所限。 相机自动对焦原理 TriumphRay 于 2020-01-16 18:59:41 发布 凸透镜成像原理 这一部分大家中学应该就学过…

ms-hot29 解码方法

leetcode原题链接: 解码方法 ms-hot目录: ​​​​​​ ms-hot目录 上一篇:ms-hot28 合并两个有序数组 下一篇:二叉树的中序遍历 题目描述 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : "1" -> A "2"…

Qt中QSpinBox valueChanged 信号触发两次

Qt中QSpinBox valueChanged 信号触发两次 如果使用鼠标调整,这个信号则会被触发两次如果使用键盘输入,则会触发一次 connect(ui->spinBox_rows, SIGNAL(valueChanged(int)), this, SLOT(test()));https://blog.csdn.net/dododododoooo/article/deta…

c++的虚继承说明、案例、代码

虚继承的基本概念 在 C 中,虚继承主要用于解决多继承时可能出现的菱形继承问题。菱形继承是指一个类有两个(或更多)子类,而这两个子类又同时继承自一个共同的基类,当这些子类又被另一个类继承时,就形成了菱…

Mysql误删表中数据与误删表的恢复方法

查看数据库是否开启binlog日志 mysql> show variables like %log_bin%; ------------------------------------------------------------------------ | Variable_name | Value | ------------------------------------…

ZYNQ试用于哪些场景

ZYNQ系列SoC(System on Chip)由于其独特的处理器与FPGA(可编程逻辑)集成设计,非常适合应用于多种需要高性能、灵活性和低功耗的场景。 以下是一些ZYNQ特别适用的场景: 嵌入式系统:ZYNQ的ARM处理…