OpenCV--形态学
形态学
- 形态学
- 图像全局二值化
- 自适应阈值
- 腐蚀操作
- 膨胀
- 开运算
- 闭运算
- 形态学梯度
- 顶帽操作
- 黑帽操作
形态学
从图像中提取对表达和描绘区域形状有意义的图像分量
图像全局二值化
import cv2
import numpy as np
"""
图像全局二值化--0与255
二值化的主要目的是通过简化图像信息、增强对比度、分割目标物体、提取特征信息、去除噪声以及压缩存储和快速处理等方式,使图像更容易被计算机处理和分析
最好是灰度图
"""
img = cv2.imread('./img/cat.jpeg')
# 二值操作对灰度图像操作,先把图像变为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 二值化 127:阈值, 255最大值, cv2.THRESH_BINARY操作类型
# 返回两个值,一个是阈值,一个是二值化处理后的图片
thresh, dst = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)cv2.imshow('cat', np.hstack((gray, dst)))
自适应阈值
"""
自适应阈值二值化,全局二值化在全图中只能采用一个阈值,不同的部分具有不同的亮度,阈值应该不同
"""
# 255最大值, cv2.ADAPTIVE_THRESH_GAUSSIAN_C计算阈值的方法,有两个选择,这个是最好的, cv2.THRESH_BINARY操作类型
# 3为计算阈值的区域大小 0为一个常数,阈值等于平均值或者加权平均值减去这个常数
dst1 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 3, 0)
腐蚀操作
"""
腐蚀操作--通过消除图像中的边界点来使图像沿着边界向内收缩。这种操作可以用于消除图像中的小型噪点、细小物体,或者断开相连的物体。选择一个结构元素(也称为腐蚀核):结构元素是一个小的二维数组,用于定义腐蚀操作的运算方式。其大小和形状决定了腐蚀的强度和效果。
逐像素比较:将结构元素放置在图像的某个像素位置上,然后对于结构元素和图像重叠的区域,检查结构元素内的所有像素是否都与图像内的对应像素匹配。
更新像素值:如果结构元素内的所有像素都与图像内的对应像素匹配,则该像素保持不变;否则,将该像素置为背景值(通常是0或黑色)。
遍历整个图像:重复上述步骤,直到遍历完整个图像。简单点说就是,在全黑的背景图里面有一些白色字体,如果腐蚀核在背景图中的重叠区域全是白色,则结果为白色,但只要有一点黑色,则全为黑色
所以腐蚀核的大小很重要
"""
# 腐蚀核是全1的, iterations迭代次数,即腐蚀次数,次数越多,效果越好
kernel = np.opnes((3, 3), np.uint8)
dst2 = cv2.erode(img, kernel, iterations=2)# 但每次腐蚀核需要自己写,很麻烦,我们可以自动获取
# 获取形态学腐蚀核 cv2.MORPH_RECT:形状, MORPH_RECT长方形, MORPH_ELLIPSE椭圆, MORPH_CROSS十字架
# (5, 5)大小
kernel1 = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5))
膨胀
"""
膨胀--通过将图像中的像素值进行扩展或“增肥”,使得图像的边界向外扩张
和腐蚀相反
"""
dst3 = cv2.dilate(img, kernel, iterations=1)
开运算
"""
开运算 = 腐蚀 + 膨胀
开运算可以去除图形外的噪点
真实使用时,注意调节核大小和迭代次数
"""
kernel2 = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
dst4_1 = cv2.erode(img, kernel, iterations=1)
dst4_2 = cv2.dilate(img, kernel, iterations=1)# OpenCV提供了开运算(cv2.MORPH_OPEN)的api, 噪声比较多的情况下,kernel选择大一点
dst4_3 = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel, iterations=2)
闭运算
"""
闭运算 = 膨胀 + 腐蚀
闭运算可以去除图形内部的噪点
这里仅展示api方法,同上
真实使用时,注意调节核大小和迭代次数
"""
dst5 = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel, iterations=2)
形态学梯度
"""
形态学梯度 = 原图 - 腐蚀
即得到腐蚀掉的部分--边缘
真实使用时,注意调节核大小和迭代次数
"""
# cv2.MORPH_GRADIENT 形态学梯度
dst6 = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel, iterations=2)
顶帽操作
"""
顶帽操作 = 原图 - 开运算
开运算可以去除图形外的噪点,顶帽操作得到去除的噪点
真实使用时,注意调节核大小和迭代次数
"""
# cv2.MORPH_TOPHAT 顶帽操作
dst7 = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel, iterations=2)
黑帽操作
"""
黑帽操作 = 原图 - 闭运算
得到图形内部的噪点
真实使用时,注意调节核大小和迭代次数
"""
dst8 = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel, iterations=2)cv2.waitKey(0)
cv2.destroyAllWindows()
相关文章:
OpenCV--形态学
形态学 形态学图像全局二值化自适应阈值腐蚀操作膨胀开运算闭运算形态学梯度顶帽操作黑帽操作 形态学 从图像中提取对表达和描绘区域形状有意义的图像分量 图像全局二值化 import cv2 import numpy as np """ 图像全局二值化--0与255 二值化的主要目的是通过…...
【LinuxC语言】IP地址相关的函数
文章目录 前言inet_addr()inet_aton()inet_ntoa()示例代码总结前言 在Linux C语言编程中,处理网络通信是一个核心主题,其中涉及到的IP地址相关函数扮演着至关重要的角色。这些函数允许我们在不同的网络层次上操作和管理IP地址,从而实现有效的数据传输和通信控制。本文将介绍…...

QT事件处理系统之五:自定义事件的发送案例 sendEvent和postEvent接口
1、案例 双击窗口,会发送 自定义事件,然后在事件过滤中心进行拦截处理自定义事件。 2、核心代码 /*解释:双击窗口时,将产生双击事件,然后该事件被包裹成一个对象,随后将会被发往event事件中心,然后进行事件的处理(Widget对象);因为m_lineEdit开启了事件过滤机制,所…...

模版与策略模式
一,怎么选择 如果需要固定的执行流程,选模版 如果不需要固定的执行流程,只需要对一个方法做具体抽象,选策略 参考文章: 常用设计模式汇总,告诉你如何学习设计模式 二,常用写法 子类 exten…...

SQL-Python
师从黑马程序员 数据库介绍 数据库就是存储数据的库 数据组织:库->表->数据 数据库和SQL的关系 MySQL的基础命令 SQL基础 SQL语言的分类 SQL的语法特征 DDL-库管理 show DATABASES;use sys;SELECT database();CREATE DATABASE test CHARSET utf-8;SHOW D…...
mysql索引以及优化
索引的作用 在数据库表中对字段建立索引可以大大提高查询速度 mysql索引类型 普通索引唯一索引: 唯一索引列的值必须唯一允许有空值,如果是组合索引,则列值的组合必须唯一create unique index indexName on mytable(username(length))修改表结…...

【pytorch06】 维度变换
常用API view/reshapesqueeze/unsqueezetranspose/t/permuteexpand/repeat view和reshape view操作的基本前提是保证numel()一致 a.view(4,28*28)的物理意义是把行宽以及通道合并在一起,对于4张图片,我们直接把所有数据都合在一起,用一个7…...

移动Web开发实战内容要点!!!
移动web开发 目录 移动web开发 第一章、Web开发标准与网页网站制作介绍 1.1Web开发标准 1.2网页基本构成元素 第二章、Web开发技术基础 2.1HTML的主要特点: 2.2HTML基本知识 2.3CSS样式 2.4JavaScript 第三章、打造移动Web应用程序 3.1为什么Android会成…...

spdlog生产者消费者模式
spdlog生产者消费者模式 spdlog提供了异步模式,显示的创建async_logger, 配合环形队列实现的消息队列和线程池实现了异步模式。异步logger提交日志信息和自身指针, 任务线程从消息队列中取出消息后执行对应的sink和flush动作。 1. 环形队列 1.1 环形队…...
日语 13 14
13. スピーチの依頼 いらい 自信 自信 自信 自信 自信 じしん 折り入って 折り入って 折り入って おりいって 诚恳 頼み 頼み 頼み 頼み 頼み たのみ 请求 整備 整備 整備 整備 整備 せいび 维修 肥満 肥満 肥満 肥満 肥満 ひまん 肥胖 権利 …...

初学者应该掌握的MySQL数据库的基本组成部分及概念
MySQL数据库作为一种开源的关系型数据库管理系统,被广泛应用于Web应用开发和数据存储。它具有高性能、易用性和可靠性等特点,是开发者们的首选之一。在本篇文章中,我们将详细介绍MySQL数据库的核心组成部分,帮助你深入理解这个强大…...

四川汇聚荣科技有限公司怎么样?
在探讨一家科技公司的综合实力时,我们往往从多个维度进行考量,包括但不限于公司的发展历程、产品与服务的质量、市场表现、技术创新能力以及企业文化。四川汇聚荣科技有限公司作为一家位于中国西部的科技企业,其表现和影响力自然也受到业界和…...

数据仓库和数据库有什么区别?
一、什么是数据仓库二、什么是数据库三、数据仓库和数据库有什么区别 一、什么是数据仓库 数据仓库(Data Warehouse)是一种专门用于存储和管理大量结构化数据的信息系统。它通过整合来自不同来源的数据,为企业提供统一、一致的数据视图&…...
计算子网掩码
例题 如果子网掩码是255.255.192.0, 那么下面主机()必须通过路由器才能与主机129.23.144.16通信( 1分 )A.129.23.148.127B. 129.23.191.21C. 129.23.127.222D. 129.23.130.33计算 要确定哪些主机必须通过路由器才能与…...
JVM 垃圾收集算法
首先我们要知晓,垃圾收集是建立在两个分代假说之上的: ①弱分代假说:绝大多数对象都是朝生夕灭的 ②强分代假说:熬过越多次垃圾收集的对象就越难消亡 收集器应该将Java堆划分出不同的区域,然后将回收对象依据其年龄分配…...

安装虚拟环境
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Flask依赖两个外部库:Werkzeug和Jinja2。Werkzeug是一个WSGI(在Web应用和多种服务器之间的标准 Python 接口)工具…...

【ai】tx2-nx:安装深度学习环境及4.6对应pytorch
参考:https://www.waveshare.net/wiki/Jetson_TX2_NX#AI.E5.85.A5.E9.97.A8 英伟达2021年发布的的tritionserver 2.17 版本中,backend 有tensorflow1 和 onnxruntime ,他们都是做什么用的,作为backend 对于 triton 推理server意义是什么,是否应该有pytorch? Triton Infer…...

华为某员工爆料:三年前985本科起薪30万,现在硕士起薪还是30w,感慨互联网行情变化
“曾经的30万年薪,是985本科学历的‘标配’,如今硕士也只值这个价?” 一位华为员工的爆料,揭开了互联网行业薪资变化的冰山一角,也引发了不少人的焦虑:互联网人才“通货膨胀”的时代,真的结束了…...
Java基础--AOP--1.概述
一、AOP简介 AOP(Aspect Oriented )即为面向切面编程,也可称为面向方法编程,是方法增强的一种途径,通常可用于记录操作日志、权限空值、事务管理等等;Spring框架中的事务底层就是AOP。 二、AOP的组成 1、连接点&…...

【计算机网络仿真实验-实验3.1、3.2】交换路由综合实验
实验3.1 交换路由综合实验——作业1 一、实验目的 运用实验二(可前往博主首页计算机网络专栏下查看)中学到的知识,将这个图中的PC机连接起来组网并分析,本篇涉及代码以截图展示,过于简单的代码及操作不再详细介绍&…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...