机器学习: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讲堂》 这是《文心智能体平台》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 创建灵感基本配置头像名称和简介人物设定角色与目标思考路…...

服务器监控工具都是监控服务器的哪些性能和指标
服务器监控工具通常用于确保服务器及其相关服务的正常运行。这些工具可以帮助管理员快速识别并解决问题,从而减少停机时间和性能下降的风险。以下是服务器监控工具通常会监控的一些主要内容: 系统健康状态: CPU使用率 内存(RAM&…...

不小心删除丢失了所有短信?如何在 iPhone 上查找和恢复误删除的短信
不小心删除了一条短信,或者丢失了所有短信?希望还未破灭,下面介绍如何在 iPhone 上查找和恢复已删除的短信。 短信通常都是非正式和无关紧要的,但短信中可能包含非常重要的信息。因此,如果您删除了一些短信以清理 iPh…...

【skyvern 快速上手】一句话让AI帮你实现爬虫+自动化
目录 skyvern介绍主要特点工作流程 部署(重点介绍源码部署)源码部署docker快速部署 运行(基于源码)后端前端 快速使用示例总结 skyvern介绍 Skyvern 是一款利用大语言模型(LLM)和计算机视觉技术来自动化浏…...

【C++ Primer Plus习题】14.1
大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream> #include "wine.h" …...

在Ubuntu上运行QtCreator相关程序
背景:希望尝试在Linux系统上跑一下使用QtCreator相关的程序,因为有一些工作岗位要求有Linux上使用Qt的经验。 (1)我是把Windows上的程序移过来的,Windows上文件名称是不区分大小写的。 而Ubuntu上是区分的 所以一部分头文件需要进行修改&am…...

MybatisPlus 快速入门
目录 简介 安装 Spring Boot2 Spring Boot3 Spring 配置 Spring Boot 工程 Spring 工程 常见注解 条件构造器 流式查询 使用示例 批量操作 使用示例 自定义SQL Service接口 CRUD 扩展功能 代码生成 安装插件 通用枚举 配置枚举处理器 插件功能 配置示例…...

Java.lang中的String类和StringBuilder类介绍和常用方法
目录 Java.lang中的String类和StringBuilder类介绍和常用方法 String类介绍 String类的底层成员介绍 基本介绍 回顾String传址调用问题 String类对象的创建方式 String面试题 创建对象or不创建对象 创建了几个对象and共有几个对象 String常用方法 判断字符串是否相等方法 获取字…...

notepad++软件介绍(含安装包)
Notepad 是一款开源的文本编辑器,主要用于编程和代码编辑。它是一个功能强大的替代品,常常被用来替代 Windows 系统自带的记事本。 Notepad win系统免费下载地址 以下是 Notepad 的一些主要特点和功能: 多语言支持:Notepad 支持多…...

chapter13-常用类——(章节小结)——day17
498-常用类阶段梳理...

RTX AI PC 和工作站上部署多样化 AI 应用支持 Multi-LoRA
今天的大型语言模型(LLMs)在许多用例中都取得了前所未有的成果。然而,由于基础模型的通用性,应用程序开发者通常需要定制和调整这些模型,以便专门针对其用例开展工作。 完全微调需要大量数据和计算基础设施࿰…...