机器学习:opencv--图像形态学
目录
前言
一、常用形态学操作
二、腐蚀和膨胀
1.图像腐蚀
2.图形膨胀
三、开运算和闭运算
1.开运算
2.闭运算
四、顶帽和黑帽
1.顶帽
2.黑帽
五、梯度运算
总结
前言
图像形态学是一种用于处理和分析图像形状和结构的技术。
一、常用形态学操作
- 膨胀(Dilation):扩展前景区域,使对象变大。
- 腐蚀(Erosion):缩小前景区域,去除小的噪声点。
- 开运算(Opening):先腐蚀后膨胀,用于去除小物体。
- 闭运算(Closing):先膨胀后腐蚀,用于填充小孔洞。
- 顶帽(Top-hat):原图像与开运算结果的差异。用于提取图像中比背景亮的细节,通常用于突出小的亮区域。
- 黑帽(Black-hat):闭运算结果与原图像的差异。用于提取图像中比背景暗的细节,通常用于突出小的暗区域。
- 梯度运算:梯度运算实际上是膨胀操作减去腐蚀操作的结果。
二、腐蚀和膨胀
1.图像腐蚀
- 缩小前景区域,去除小的噪声点。
import numpy as np
import cv2"""
图像腐蚀
dst = cv2.erode(src, kernel, dst,anchor,iterations,borderType,borderValue)
"""
sun = cv2.imread('sun.png')
cv2.imshow('sun', sun)
cv2.waitKey(0)kernel = np.ones((2, 2), np.uint8) # 设置kernel大小
erosion_1 = cv2.erode(sun, kernel, iterations=5)
cv2.imshow('erode', erosion_1)
cv2.waitKey(0)
输出:
- 左边是原图,右边是腐蚀之后的
2.图形膨胀
- 扩展前景区域,使对象变大。
import numpy as np
import cv2"""
图像膨胀
dst = cv2.dilate(img, kernel,iteration)
"""
text = cv2.imread('eng_text.png')
cv2.imshow('text', text)
cv2.waitKey(0)kernel = np.ones((2, 2), np.uint8)
text_new = cv2.dilate(text, kernel, iterations=3)
cv2.imshow('dilate', text_new)
cv2.waitKey(0)
输出:
- 左边是原图,右边是膨胀之后的图像
三、开运算和闭运算
1.开运算
- 先腐蚀后膨胀,用于去除小物体。
# 开运算 先腐蚀后膨胀
zw_noise = cv2.imread('zw_noise.png')
cv2.imshow('zw_noise', zw_noise)
cv2.waitKey(0)kernel = np.ones((2, 2), np.uint8)
zw_open = cv2.morphologyEx(zw_noise, cv2.MORPH_OPEN, kernel) # 先腐蚀 后膨胀
cv2.imshow('zw_open', zw_open)
cv2.waitKey(0)
输出:
- 左边是原图,右边是进行开运算之后的图片
2.闭运算
- 先膨胀后腐蚀,用于填充小孔洞。
zw = cv2.imread('zw.png')
cv2.imshow('zw', zw)
cv2.waitKey(0)kernel = np.ones((5, 5), np.uint8)
zw_close = cv2.morphologyEx(zw, cv2.MORPH_CLOSE, kernel) # 先腐蚀 后膨胀
cv2.imshow('zw_close', zw_close)
cv2.waitKey(0)
输出:
- 左边是原图,右边是经过闭运算之后的图
- 可以看出来指纹有些断开的地方连接起来了
四、顶帽和黑帽
1.顶帽
- 原图像与开运算结果的差异。用于提取图像中比背景亮的细节,通常用于突出小的亮区域。
sun = cv2.imread('sun.png')
cv2.imshow('sun', sun)
cv2.waitKey(0)kernel = np.ones((2, 2), np.uint8)
# 开运算
open_sun = cv2.morphologyEx(sun, cv2.MORPH_OPEN, kernel)
cv2.imshow('open_sun', open_sun)
cv2.waitKey(0)
# 顶帽
tophat = cv2.morphologyEx(sun, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出:
- 左边原图,中间开运算,右边顶帽运算
- 顶帽之后有种凹陷的感觉
2.黑帽
- 闭运算结果与原图像的差异。用于提取图像中比背景暗的细节,通常用于突出小的暗区域。
sun = cv2.imread('sun.png')
cv2.imshow('sun', sun)
cv2.waitKey(0)
kernel = np.ones((2, 2), np.uint8)
cv2.imshow('sun', sun)
cv2.waitKey(0)
# 闭运算
close_sun = cv2.morphologyEx(sun, cv2.MORPH_CLOSE, kernel)
cv2.imshow('close_sun', close_sun)
cv2.waitKey(0)
# 黑帽
blackhat = cv2.morphologyEx(sun, cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('blackhat', blackhat)
cv2.waitKey(0)
输出:
- 左边原图,中间闭运算,右边黑帽之后的图片
五、梯度运算
- 用于提取图像的边缘,计算图像的变化率。
"""
梯度运算: 膨胀-腐蚀
"""
text = cv2.imread('eng_text.png')
# cv2.imshow('text', text)
# cv2.waitKey(0)kernel = np.ones((2, 2), np.uint8)
# 膨胀
pz_text = cv2.dilate(text, kernel, iterations=2)
cv2.imshow('pz_text', pz_text)
cv2.waitKey(0)
# 腐蚀
fs_text = cv2.erode(text, kernel, iterations=2)
cv2.imshow('fs_text', fs_text)
cv2.waitKey(0)
# 膨胀-腐蚀
text_new = cv2.morphologyEx(text, cv2.MORPH_GRADIENT, kernel)
cv2.imshow('text_new', text_new)
cv2.waitKey(0)
输出:
- 左边是膨胀的图片,中间是腐蚀的图片,右边是梯度运算之后的图片
- 有一种镂空的感觉
总结
这些处理方法主要用于图像的边缘检测和特征增强。通过膨胀,图像的前景区域会被扩展,填补细小的空洞;通过腐蚀,前景区域会被缩小,去除噪声。梯度运算(膨胀减腐蚀)则能够突出图像中的边缘信息,有助于识别和分析图像中的结构和形状。
相关文章:

机器学习:opencv--图像形态学
目录 前言 一、常用形态学操作 二、腐蚀和膨胀 1.图像腐蚀 2.图形膨胀 三、开运算和闭运算 1.开运算 2.闭运算 四、顶帽和黑帽 1.顶帽 2.黑帽 五、梯度运算 总结 前言 图像形态学是一种用于处理和分析图像形状和结构的技术。 一、常用形态学操作 膨胀(…...

网络基础入门指南(一)
前言 在这个高度互联的世界里,互联网已成为日常生活不可或缺的一部分。然而,对于许多人来说,网络是如何工作的仍然是个谜。本文旨在为那些对网络基础知识感兴趣的朋友提供一个简单的介绍,帮助大家更好地理解互联网的基本原理和技…...

【项目】云备份
云备份 云备份概述框架 功能演示服务端客户端 公共模块文件操作模块目录操作模块 服务端模块功能划分功能细分模块数据管理热点管理 客户端模块功能划分功能细分模块数据管理目录检查文件备份 云备份 概述 自动将本地计算机上指定文件夹中需要备份的文件上传备份到服务器中。…...

WebGL系列教程二(环境搭建及初始化Shader)
目录 1 前言2 新建html页面3 着色器介绍3.1 顶点着色器、片元着色器与光栅化的概念3.2 声明顶点着色器3.3 声明片元着色器 4 坐标系(右手系)介绍5 着色器初始化5.1 给一个画布canvas5.2 获取WebGL对象5.3 创建着色器对象5.4 获取着色器对象的源5.5 绑定着色器的源5.6 编译着色器…...

keepalive和nginx高可用集群
keepalived 和 nginx 高可用集群搭建 主备模式 zyj86主机和zyj87主机安装nginx和keepalived yum install nginx keepalived -y systemctl enable --now nginx.service keepalived.service主调度器配置 编辑zyj86主机(主)配置文件 vi /etc/keepalived…...
二分查找题总结
二分查找题总结 hot100搜索插入位置搜索二维矩阵在排序数组中查找元素的第一个和最后一个位置搜索旋转排序数组寻找旋转排序数组中的最小值寻找两个正序数组的中位数 hot100 搜索插入位置 题目链接: 35.搜索插入位置 代码: class Solution {public in…...

仕考网:公务员面试流程介绍
通知进面信息——资格审查——面试签到——抽签候考 面试形式: 面试分为结构化和无领导小组两种形式 1.在结构化面试中,当轮到某位考生时,引导员将在候考室宣布其编号,随后考生跟随引导人员前往考场入口。考生在开始考试时需回…...

(十五)SpringCloudAlibaba-Sentinel持久化到Nacos
前言 在前面我们已经将Sentinel配置的规则持久化到系统的文件中。本章节我们将Sentinel持久化到Nacos中; 传送门(Sentinel数据持久化到文件)https://blog.csdn.net/weixin_45876411/article/details/140742963 默认情况下 Sentinel 只能接收到 Nacos 推送的消息,但…...

GitHub图床
GitHub图床 文章目录 GitHub图床图床介绍Github访问GitHub手动修改hostsgithub520 加速器创建账户创建仓库创建token PicGoTypora 图床介绍 图床 存放图片的地方 为什么设置图床呢 在我认识图床之前, 有一个问题 [^放在typora上面的图片, 其实是一个链接, 并且将图片存放在本地…...

记一次高版本view-design的组件迁移到自身项目的低版本
背景 npm i -S view-design当前老项目使用view-design这个组件库,但是当我们去官网查看该组件库最新版本,竟然发现没有博主想用的image/ImagePreivew这两个基础组件 说实话,有点离谱了哈!! 自己造轮子? …...

QT运行ROS工程
文章目录 使用QT创建ROS工程项目配置修改cmake环境配置运行设置 运行 使用QT创建ROS工程 工程名字和路径 下一步(直接选择默认选项就可以)->完成 完成之后 是这样的 接下来在工作空间里面创建功能包 鼠标选中src点击右键->添加新文件 name::功能包的名字…...

电脑技巧:如何在Win11电脑上调整设置,让屏幕更加护眼?
目录 一、调整屏幕亮度 二、启用夜间模式 三、调整色彩设置 四、使用第三方护眼软件 五、保持良好的用眼习惯 总结 随着长时间使用电脑的人越来越多,护眼问题也变得越来越重要。Win11作为更新的操作系统,提供了更多的设置选项来帮助我们保护眼睛。本文将详细介绍如何在…...

【数据结构】排序算法篇二
【数据结构】排序算法篇二 1. 快速排序(hoare版本)(1)基本思想:(2)动态图解:(3)代码实现:(4)特性总结: 2. 快速…...

python进阶篇-day09-数据结构与算法(非线性结构与排序算法)
非线性结构(树状结构) 特点: 每个节点都可以有n个子节点(后继节点) 和 n个父节点(前驱节点) 代表: 树, 图...... 概述 属于数据结构之 非线性结构的一种, 父节点可以有多个子节点(后续节点) 特点 有且只有1个根节点 每个节点都可以有1个父节点及任意个子节点, 前提: 根节点除…...
线性代数基础
Base 对于矩阵 A,对齐做 SVD 分解,即 U Σ V s v d ( A ) U\Sigma V svd(A) UΣVsvd(A). 其中 U 为 A A T AA^T AAT的特征向量,V 为 A T A A^TA ATA的特征向量。 Σ \Sigma Σ 的对角元素为降序排序的特征值。显然,U、V矩阵…...
LCR 021
题目:LCR 021 解法一:计算链表长度 遍历两次,第一次获取链表长度 L(包括虚拟节点),第二次遍历到第 L-n 个节点(从虚拟节点遍历) public ListNode removeNthFromEnd(ListNode head, …...

【阿雄不会写代码】全国职业院校技能大赛GZ036第四套
也不说那么多了,要用到这篇博客,肯定也知道他是干嘛的,给博主点点关注点点赞!!!这样博主才能更新更多免费的教程,不然就直接丢付费专栏里了,需要相关文件请私聊...

Vue组件:使用$emit()方法监听子组件事件
1、监听自定义事件 父组件通过使用 Prop 为子组件传递数据,但如果子组件要把数据传递回去,就需要使用自定义事件来实现。父组件可以通过 v-on 指令(简写形式“”)监听子组件实例的自定义事件,而子组件可以通过调用内建…...

数据分析-埋点
1、数据埋点的定义 针对特定用户行为或事件进行捕获、处理何发送的相关技术及其实施过程。 2、数据埋点的原理 埋点是数据采集的重要方式。通过在页面上植入代码,监控用户行为(例:页面加载、按钮点击等)。用户一旦触发了该事件,就会根据埋点信息将相关数…...

【文心智能体】通过工作流使用知识库来实现信息查询输出,一键查看旅游相关信息,让出行多一份信心
欢迎来到《小5讲堂》 这是《文心智能体平台》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 创建灵感基本配置头像名称和简介人物设定角色与目标思考路…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...