OpenCV形态学

什么事形态学处理
基于图像形态进行处理的一些基本方法;
这些处理方法基本是对二进制图像进行处理;
卷积核决定着图像出来后的效果。

一 图像二值化

什么是二值化
将图像的每个像素变成两种值,如0,255.

全局二值化。

局部二值化。

threshold API

threshold(img,thresh,maxVal,type)
img:图像,最好是灰度图
thresh:阈值
maxVal:超过阈值,替换成maxVal
THRESH_BINARY和THRESH_BINARY_INV
THRESH_TRUNC
THRESH_TOZERO和THRESH_TOZERO_INV
import cv2

import numpy as np

img=cv2.imread('./2037551.jpg')

img1=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

ret,dst=cv2.threshold(img,180,255,cv2.THRESH_BINARY)

cv2.imshow('img',img)
cv2.imshow('gray',img1)
#cv2.imshow('bin',bin)

cv2.waitKey(0)

二 阈值类型

thresholdType
在这里插入图片描述

三 自适应阈值

由于光照不均匀以及阴影的存在,只有一个阈值会使得在阴影处的白色被二值化成黑色。

adaptiveThresholdAPI

adaptiveThreshold(img,maxVal,adaptiveMethod,type,blockSie,C)
adaptiveMethod:计算阈值的方法
blockSize:邻近区域的大小
C:常量,应从计算出的平均值或加权平均值中减去;
adaptiveMethod
计算阈值的方法
ADAPTIVE_THRESH_MEAN_C:计算领近区域的平均值
ADAPIVE_THRESH_GAUSSIAN_C:高斯窗口加权平均值
Type:THRESH_BINARY,THRESH_BINARY_INV
import cv2
import numpy as np

img=cv2.imread('./2037551.jpg')
img1=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

dst=cv2.adaptiveThreshold(img1,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                              cv2.THRESH_BINARY_INV,11,0)

print(dst.shape)

cv2.imshow('img',img)
cv2.imshow('img1',img)
cv2.imshow('dst',dst)

cv2.waitKey(0)

四 腐蚀

在这里插入图片描述

1 腐蚀运算在这里插入图片描述

2 腐蚀效果

在这里插入图片描述

3 腐蚀API

erode(img,kernel,iterations=1)
import cv2
import numpy as np

img=cv2.imread('./2037551.jpg')

kernel=np.ones((3,3),np.uint8)

dst=cv2.erode(img,kernel,iterations=1)

cv2.imshow('img',img)
cv2.imshow('dst',dst)
cv2.waitKey(0)

六 获取形态学卷积核

卷积核的类型

getStructuringElement(type,size)
Size值为:3:3)、(5,5...
MORPH_RECT
MORPH_ELLIPSE
MORPH_CROSS

七 OPenCV 膨胀

膨胀运算
在这里插入图片描述

1 膨胀效果

在这里插入图片描述

2 膨胀API

dilate(img,kernel,iterations=1)

问题
如果是白底黑字,进行腐蚀与膨胀后会怎样?
卷积核是否可以设置为全0?

八 开运算

开运算=腐蚀+膨胀

开运算效果
在这里插入图片描述
开运算API

morphologyEx(img,EORPH_OPEN,kernel)

import cv2
import numpy as np

img=cv2.imread('./2037551.jpg')

kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(7,7))

#dst=cv2.erode(img,kernel,iterations=1)

#膨胀
#dst1=cv2.dilate(img,kernel,iterations=1)

dst1=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
#cv2.imshow('dst',dst)
cv2.imshow('dst1',dst1)
cv2.waitKey(0)

九 闭运算

闭运算效果
在这里插入图片描述
闭运算API

morphology(img,MORPH_CLOSE,kernel)

十 形态学剃度

梯度=原图-腐蚀

梯度效果图

梯度API

morphologyEx(img,MORPH_GRADIENT,kernel)
import cv2
import numpy as np

img=cv2.imread('./2037551.jpg')

kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(7,7))

#梯度
dst1=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)

cv2.imshow('img',img)
cv2.imshow('dst',dst1)
cv2.waitKey(0)

十一 顶帽运算

顶帽=原图-开运算

顶帽效果图
在这里插入图片描述
顶帽API

morphologyEx(img,MORPH_TOPHAT,kernel)
import cv2
import numpy as np

img=cv2.imread('./2037551.jpg')

kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(19,19))

#顶帽
dst1=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)

cv2.imshow('img',img)
cv2.imshow('dst',dst1)
cv2.waitKey(0)

十二 黑帽运算

黑帽=原图-闭运算

黑帽效果图
在这里插入图片描述
黑帽API

morphologyEx(img,MORPH_BLACKHAT,kernel)
import cv2
import numpy as np

img=cv2.imread('./2037551.jpg')

kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(19,19))

#顶帽
dst1=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)

cv2.imshow('img',img)
cv2.imshow('dst',dst1)
cv2.waitKey(0)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【AIGC】MetaGPT原理以及应用

目录 MetaGPT原理 MetaGPT应用 MetaGPT和传统编程语言相比有什么优势和劣势 视频中的PPT 参考资料 MetaGPT原理 MetaGPT是一种多智能体框架,它结合了元编程技术,通过标准化操作程序(SOPs)来协调基于大语言模型的多智能体系统…

商品搬家到抖店

使用的工具为 张飞搬家,登录上去 张飞搬家 1 复制商品的网址 商品链接复制过去后,点击下面的开始批量复制 2 检查修改商品信息 价格啊、图片啊、各种商品属性啊,检查下,不合适的修改和补充 3 开始搬家 4 查看商品 打开抖店后…

数据库基础(一)

目录 一、一些基本概念 1. 四个事务隔离级别 Read Uncommitted(读取未提交内容) Read Committed(读取提交内容) Repeatable Read(可重读) Serializable(可串行化) 2. MVCC&am…

Windows运维:找到指定端口的服务

运维过windows的或多或少都遇到过需要找到一个端口对应的服务,或者是因为端口占用,或者是想看下对应的服务是哪个,那么如何操作呢?看看本文吧。 1、按照端口找到进程ID 例如想找8000端口的进程ID netstat -ano | findstr :8000 2…

大模型算法备案全网最详细说明(附附件)

本文要点:大模型备案最详细说明,大模型备案条件有哪些,《算法安全自评估报告》模板,大模型算法备案,大模型上线备案,生成式人工智能(大语言模型)安全评估要点,网信办大模型备案。 共分为以下几…

【Numpy】一文向您详细介绍 np.floor()

【Numpy】一文向您详细介绍 np.floor() 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的普通本硕,…

【操作与配置】Pytorch环境搭建

安装显卡驱动 显卡驱动是一种软件程序,用于控制显卡硬件与操作系统之间的通信和交互。显卡驱动负责向操作系统提供有关显卡硬件的信息,以及使操作系统能够正确地控制和管理显卡的各种功能和性能。显卡驱动还包含了针对不同应用程序和游戏的优化&#xff…

python生成验证码图片,结合接口供前端调用

🌈所属专栏:【python】✨作者主页: Mr.Zwq✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询! 您的…

海外仓系统如何让海外仓受益,WMS海外仓系统使用指南

随着跨境电商业务的快速发展,海外仓面临着需要更加高速运转的巨大挑战。 当海外仓出现因为手动作业导致效率低下,成本不断飙升或者出现库存管理问题的时候,意味着是时候引入一套合适的海外仓管理系统了。 对于寻求海外仓业务流程优化的企业…

2779. 数组的最大美丽值

简单翻译一下题目意思: 对于每个 nums[i] 都可以被替换成 [nums[i]-k, nums[i]k] 区间中的任何数,区间左右是闭的。在每个数字可以替换的前提下,返回数组中最多的重复数字的数量。 第一想法是用一个哈希表,Key 是可以被替换的数…

设置SSHkeys多服务器免登录配置(ssh config)

一、背景: 多邮箱或者多git账号进行同一台电脑开发的情况。 有时候,开发时可能会面临一个情况,就是通过自己的电脑,可能同时需要开发多个不同地方的项目,或者说,自己建立的项目已经配置好SSH验证免密登录&a…

阿里云系列产品免费用,不香吗?

阿里云系列产品免费用,不香吗? 什么是无影云电脑开启无影云下载安装客户端登录无影云桌面应用场景 开篇先发布一下阿里云产品免费体验地址:https://free.aliyun.com/?utm_contentg_1000370296 下面开始我的无影云电脑或者叫做无影云桌面的体…

【scikit-learn入门指南】:机器学习从零开始

1. 简介 scikit-learn是一款用于数据挖掘和数据分析的简单高效的工具,基于NumPy、SciPy和Matplotlib构建。它能够进行各种机器学习任务,如分类、回归和聚类。 2. 安装scikit-learn 在开始使用scikit-learn之前,需要确保已经安装了scikit-le…

【会议征稿,IEEE出版】第六届物联网、自动化和人工智能国际学术会议(IoTAAI 2024,7月26-28)

第六届物联网、自动化和人工智能国际会议(IoTAAI 2024)将于2024年07月26-28日在中国广州召开。 会议旨在拓展国际科技学术交流渠道,搭建学术资源共享平台,促进全球范围内的科技创新,提升中外学术合作。会议还鼓励不同领…

免费的端口映射工具哪个好用

端口映射,即从一个网络环境下的端口映射到另一个网络环境下访问的过程。通常由软件方式来提供这一过程的实现,或一些客户端工具。当涉及内外网时,如内网端口地址映射到外网地址,即是内网穿透的原理。免费的端口映射工具有哪些&…

基于iBeacon蓝牙定位技术的反向寻车系统

随着城市化进程的加速和汽车保有量的不断增加,大型停车场成为了人们日常生活中不可或缺的一部分。然而,在繁忙的停车场中快速找到自己的车辆,成为了许多车主的难题。为了解决这一问题,维小帮基于iBeacon蓝牙技术打造的反向寻车系统…

C语言之常用字符串函数总结、使用和模拟实现

文章目录 目录 一、strlen 的使用和模拟实现 二、strcpy 的使用及模拟实现 三、strcat 的使用和模拟实现 四、strcmp 的使用和模拟实现 五、strncpy 的使用和模拟实现 六、strncat 的使用和模拟实现 七、strncmp 的使用和模拟实现 八、strstr 的使用和模拟实现 九、st…

Kafka中的时间轮算法

1. Kafka与时间轮: Kafka的定时器底层使用时间轮算法。Kafka时间轮是层次时间轮,并且支持时间轮复用。 优点: 高效的插入操作: 时间轮底层数据结构(桶),使用双向链表的设计使得插入操作的时间…

手机是如何实现多个应用程序同时运行的?

想要理解这个问题,我们要先了解一下操作系统以及进程相关的知识: 操作系统的功能有很多, 例如: 进程管理(Process Management): 功能:创建和终止进程,进程调度&#xf…

Android开发更改JDK版本

今天在跑GitHub上面一个Android项目时,在Android编译时出现如下错误: Unsupported Java. Your build is currently configured to use Java 17.0.2 and Gradle 7.0.2.错误原因: JDK和Gradle版本对应出错。 本地的JDK为1.8正好可以更改为本…