OpenCV(8)-OpenCV中的形态学

news2024/11/26 8:53:15

OpenCV中的形态学

形态学概述

  • 什么是形态学处理:
    • 基于图像形态进行处理的一些基本方法
  • 这些处理方法基本上是对二进制图像进行处理
  • 卷积核决定这图像处理后的效果
  • 基本方法:
    • 腐蚀与膨胀
    • 开运算
    • 闭运算
    • 顶帽
    • 黑帽

图像二值化

  • 将图像的每个像素变成两种值,如0,255
  • 全局二值化:全局使用相同的阈值进行二值化
  • 局部二值化:分成很多小块进行二值化

全局二值化

  • threshold(img,thresh,maxVal,type)
    • img:图像,最好是灰度图
    • thresh:阈值
    • maxVal:超过阈值,替换成maxVal
    • thresholdType:
      • THRESH_BINARY 和THRESH_BINARY _INV(加INV是将二值反过来输出)
      • THRESH_TRUNC
      • THRESH_TOZERO和THRESH_TOZERO_INV
#有两个返回值:执行结果ret及返回图像dst
ret,dst = cv2.threshold(img,180,255,cv2.THRESH_BINARY)

自适应阈值二值化

  • 全局二值化弊端:由于光照不均匀以及阴影的存在,只有一个阈值会使得在阴影处的白色被二值化成黑色
  • 使用自适应阈值二值化即可解决
  • adaptiveThreshold(img,maxVal,adaptiveMethod,type,blockSize,C)
    • adaptiveMethod:计算阈值的方法
      • ADAPTIVE_THRESH_MEAN_C:计算临近区域的平均值
      • ADAPTIVE_THRESH_GAUSSIAN_C:高斯窗口加权平均值
    • type:
      • THRESH_BINARY
      • THRESH_BINARY _INV
    • blockSize:临近区域的大小
    • C:常量,应从计算出的平均值或加权平均值中减去
dst =cv2.daptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,3,0)

腐蚀

在这里插入图片描述
在这里插入图片描述

  • 会缩小一圈
  • erode(img,kernel,iterations = 1)
    • iterations腐蚀次数
kernel = np.ones((3,3),np.uint8)
dst = cv2.erode(img,kernel,iterations = 1)

获得形态学卷积核

  • getStructuringElement(type,size)
    • type:卷积核类型
      • MORPH_RECT 矩形卷积核 全为1
      • MORPH_ELLIPSE 椭圆形卷积核 内切圆(实心)为1
      • MORPH_CROSS 十字架卷积核 过中心点的十字架为1
    • size:一般情况下值为(3,3),(5,5),(7,7)…
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
  • 卷积核大小与腐蚀与膨胀的效果密切相关!

膨胀

在这里插入图片描述
在这里插入图片描述

  • dilate(img,kernel,iterations = 1)
    • iterations膨胀次数
dst = cv2.dilate(img,kernel,iterations = 1)

开运算

  • 开运算 = 腐蚀(先) + 膨胀(后)

在这里插入图片描述

  • 能消除外部噪点
  • morphlogogyEx(img,MORPH_OPEN,kernel)
    • MORPH_OPEN:形态学的开运算
#可以先调用一次腐蚀操作,再调用一次膨胀操作实现
#也可以直接调用开运算API实现
dst = cv2.morphlogogyEx(img,cv2.MORPH_OPEN,kernel)

闭运算

  • 闭运算 = 膨胀(先) + 腐蚀(后)
    在这里插入图片描述

  • 能消除内部噪点

  • morphlogogyEx(img,MORPH_CLOSE,kernel)

    • MORPH_CLOSE:形态学的闭运算
dst = cv2.morphlogogyEx(img,cv2.MORPH_CLOSE,kernel)

形态学梯度

  • 梯度 = 原图 - 腐蚀

在这里插入图片描述

  • morphlogogyEx(img,MORPH_GRADIENT,kernel)
dst = cv2.morphlogogyEx(img,cv2.MORPH_GRADIENT,kernel)
  • kernel越小,腐蚀程度越小,用原图减去后的白色边缘越清晰;f反之kernel越大,白色越壮实

顶帽运算

  • 顶帽 = 原图 - 开运算
  • 就剩下外部噪点了
  • morphlogogyEx(img,MORPH_TOPHAT,kernel)
dst = cv2.morphlogogyEx(img,cv2.MORPH_TOPHAT,kernel)

黑帽操作

  • 黑帽 = 原图 - 闭运算
  • 就剩下内部噪点了
  • morphlogogyEx(img,MORPH_BLACKHAT,kernel)
dst = cv2.morphlogogyEx(img,cv2.MORPH_BLACKHAT,kernel)

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

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

相关文章

服务器设置tomcat开机自启动(cmd命令行语句)

1 找到tomcat安装目录,进入bin/文件夹下面,在此打开windows 命令行窗口。 2 输入 service install tomcatXXX将tomcat注册成为windows服务,其中tomcatXXX为服务名。 3查看刚刚注册的服务 “我的电脑”-》右键管理 发现刚刚的服务是手动的&…

DevOps-6:Jenkins使用技巧

1、如何提升Jenkins的Job并行构建数 默认情况下,Jenkins只配置了2个Executor,即只允许最多2个Job同时构建,这个值可以修改: 在Manage Jenkins>Configure System里,找到 # of executors,修改这个值就好&…

DW学生美食网页设计作业——餐饮美食汉堡企业网站6页面带轮播(HTML+CSS+JavaScript)

👨‍🎓静态网站的编写主要是用HTML DIVCSS JS等来完成页面的排版设计👩‍🎓,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等,用的最多的还是DW,当然不同软件写出的…

cython混淆加密

python代码是一种解释型的语言,有了代码和环境就可以执行,它无需编译。如果需要对代码进行混淆,可以借助cython这个库。它的安装很简单,直接运行pip install cython就可以安装。 进行代码混淆之前,还需要一个环境&…

windows下编译libevent源码

《Linux下编译libevent源码》讲述了linux下编译libevent源码的方法,本文讲述其在windows平台的编译。 一、下载libevent源码 https://libevent.org/ 下载libevent源码并解压。 二.安装依赖项 下载安装OpenSSL。https://slproweb.com/products/Win32OpenSSL.html 三…

MySQL8.0高级篇(下)-事务与日志和备份

文章目录一、事务基础知识1、数据库事务概述1.1 基本概念1.2 事物的ACID特性1.3 事务的状态2、如何使用事务2.1 显式事务2.2 隐式事务2.3 隐式提交数据的情况2.4 使用举例3、事务隔离级别3.1 数据准备3.2 数据并发问题3.3 SQL中的四种隔离级别3.4 MySQL支持的四种隔离级别4、事…

【实时数仓】DWM层订单宽表之需求分析、订单和订单明细关联源码

文章目录一 DWM层-订单宽表1 需求分析与思路2 订单和订单明细关联代码实现(1)从Kafka的dwd层接收订单和订单明细数据a 创建订单实体类b 创建订单明细实体类c 在dwm包下创建OrderWideApp读取订单和订单明细数据d 测试(2)订单和订单…

SpringBoot中的starter:whywhatmake

1、为什么用starter 我们知道,springboot框架是为了简化spring框架开发推出的,那么,在之前的spring框架开发中,如果我们需要连接数据库,引入mybatis框架,需要怎么操作呢?我们需要去maven仓库找…

当 chatGPT 被职场 PUA ,笑麻了

大家最近是不是被 chatGPT 刷屏了?简单来说,chatGPT 是一个智能聊天引擎。 那 chatGPT 和小爱同学、 siri 有什么区别呢? 如果体验过的朋友,能感受到区别还是很大,chatGPT 的智能表现过于优秀,远远超过了这…

深入浅出DPDK KNI核心技术

一、KNI KNI全称:Kernel NIC Interface,内核网卡接口,允许用户态程序访问linux控制平面。 在DPDK报文处理中,有些报文需要发送到内核协议栈进行处理,如GTP-C控制报文 如果报文数量较少,可以使用内核提供…

Lua热更新

Lua热更新解决方案 文章目录Lua热更新解决方案1.AB包1.1 AB包概述1. 从0开始的Lua语法1.1 HelloWorld1.2 数据类型1.3 字符串1.4 运算符1.5 条件语句1.6 循环语句1.7 函数1.8 数组1.9 迭代器1.10 字典,类,对象1.11 多脚本执行1.12 特殊语法1.13 协程1.14…

hive时间和字符串互转,时间函数

hive里经常需要将字符串转化为date或timestamp 或者转化为日期格式的string 先说一个简单的 cast(xx as date/string/timestamp) 这个大多情况都可以用 1.to_date to_date只保留年月日,参数必须是string类型的yyyy-MM-dd HH:mm:ss或者date或timestamp类型,返回值是date类型,…

尚太科技开启招股:预计募资总额22亿元,业绩增长迅猛

12月19日,石家庄尚太科技股份有限公司(下称“尚太科技”,SZ:001301)开启招股,将在深圳证券交易所主板上市。本次冲刺上市,尚太科技的发行价格为33.88元/股,发行数量为6494.37万股,募…

MySQL Binlog温故知新

目录 一、什么是Binlog 二、Binlog文件记录模式 三、Binlog 日志内容 四、常用的binlog日志操作命令 五、binlog日志中间件 一、什么是Binlog Binlog (Binary log)是MySQL的二进制日志,以二进制的形式记录了对于数据库的变更&#xff0…

Tesseract-OCR 和cnocr/cnstd

Tesseract-OCR学习系列 Tesseract-OCR学习系列(四)API - 简书 参考文档:https://github.com/tesseract-ocr/tesseract/wiki/APIExample 这篇文章介绍了GetComponentImages等基础api的用法 Python 自动识别图片文字—保姆级OCR实战教程 Py…

使用界面配置静态路由(保姆级教程)

啰嗦几句 因为写的很详细,保姆级别的,所以看起来内容很多,但是东西就那一点,你自己配个2、3遍就会了。期末考试也不用担心这个实验了。 使用Cisco Packet Tracer这个软件。 原文件下载 补充:下载后使用Cisco Packet T…

有源电力滤波器——低压配电系统

安科瑞 华楠 一、谐波的危害 ● 使公用电网中的设备产生附加谐波损耗,降低电网、输电及用电设备的使用效率。 ● 在三相四线制系统中,由于零线流过大量的3n次谐波电流,造成零线过热。 ● 谐波会产生额外的热效应,引起用电设备…

GitLab创建新分支并同步其它分支的内容(IDEA)

拉取项目到本地 选择对应项目并复制clone地址 打开IDEA,选择File–》New–》Project from Version Control 在弹出的对话框中粘贴刚才复制的地址 完成后项目就被拉取到本地对应目录中了 创建新分支 这里以master分支为例,其它分支同理 首先在GitL…

Linux Red Hat 8.0 find命令练习

find:主要用来查找字符串 常用参数: -name 搜索文件名 -iname 搜索文件名时大小写不敏感 -type d 目录、 f 普通文件、 l 符号链接 -size 指定搜索文件大小 -perm 按执行权限来查找 -user 按…

在线考试网站

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 模块划分:老师模块、班级模块、学生模块、课程模块、试题模块、试卷模块、 组卷模块、考试模块、答题模块 …