OpenCv之图像形态学

目录

一、形态学

 二、图像全局二值化

 三、自适应阈值二值化

四、腐蚀操作

五、获取形态学卷积核

六、膨胀操作

七、开运算

八、闭运算


一、形态学

定义:

  • 指一系列处理图像形状特征的图像处理技术
  • 形态学的基本思想是利用一种特殊的结构元(本质上就是卷积核)来测量或提取输入图像中相应的形状或0特征,以便进一步进行图像分析和目标识别。
  • 这些处理方法基本是对二进制图像进行处理即黑白图像
  • 卷积核决定着图像处理后的效果

 二、图像全局二值化

二值化:将图像的每个像素变成两种值,比如0,255

参照函数:

 案例代码如下:

import cv2
import numpy as  np# 导入图片
img = cv2.imread('6.jpg')# 二值化是对灰度图像操作
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 注意,threshold会返回两个值(一个是阈值,一个是二值化处理后的图片)
thresh,dst = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)# 展示
cv2.imshow('dog',np.hstack((gray,dst)))# 释放资源
cv2.waitKey(0)
cv2.destroyAllWindows()

 三、自适应阈值二值化

前提:

在前面的部分我们使用是全局闻值,整幅图像采用同一个数作为闻值。当时这种方法并不适应与所有情况,尤其是当同一幅图像上的不同部分的具有不同亮度时。这种情况下我们需要采用自适应闻值。此时的闻值是根据图像上的每一个小区域计算与其对应的闻值。因此在同一幅图像上的不同区域采用的是不同的闻值,从而使我们能在亮度不同的情况下得到更好的结果

案例代码如下:

import cv2
import numpy as npimg = cv2.imread('6.jpg')cv2.namedWindow('img',cv2.WINDOW_NORMAL)
cv2.resizeWindow('img',1920,1080)# 二值化操作是对灰度图像操作,把图像转为灰度图像
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 自适应阈值二值化只返回一个值,即二值化后的结果
dst = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,3,0)# 展示
cv2.imshow('img',np.hstack((gray,dst)))cv2.waitKey(0)
cv2.destroyAllWindows()

四、腐蚀操作

腐蚀操作也是用卷积核扫描图像,只不过腐蚀操作的卷积和一般都是1,如果卷积核内所有像素点都是白色,那么锚点也是白色。

腐蚀操作API:

 案例代码如下:

import cv2
import numpy as np# 导入图片
img = cv2.imread('6.jpg')# 定义核
kernel = np.ones((3,3),np.uint8)
dst = cv2.erode(img,kernel,iterations=2)cv2.imshow('img',np.hstack((img,dst)))cv2.waitKey(0)
cv2.destroyWindow()

五、获取形态学卷积核

OpenCv提供了获取卷积核的API,不需要我们手工创建卷积核

案例代码如下:

import cv2
import numpy as npimg = cv2.imread('6.jpg')kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))# 腐蚀
dst = cv2.erode(img,kernel,iterations=2)

六、膨胀操作

膨胀是腐蚀的相反操作,基本原理是只要保证卷积核的锚点是非0值,周边无论是0还是非0值,都变成非0 值

案例代码如下:

import cv2
import numpy as np# 导入图片
img = cv2.imread('6.jpg')# 动态获取卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))# 膨胀操作
dst = cv2.dilate(img,kernel,iterations=1)# 展示图片
cv2.imshow('img',np.hstack((img,dst)))# 释放资源
cv2.waitKey(0)
cv2.destroyAllWindows()

七、开运算

开运算=腐蚀+膨胀

 案例代码如下:

import cv2
import numpy as np# 开运算=腐蚀+膨胀
# 开运算提供了另一种去除噪声的思路
img = cv2.imread('6.jpg')kernel = cv2.cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))# # 先腐蚀
# dst = cv2.erode(img,kernel,iterations=2)
#
# # 膨胀
# dst = cv2.dilate(dst,kernel,iterations=2)# 直接调用OpenCv提供的开运算API
dst = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel,iterations=2)# 展示图片
cv2.imshow('img',np.hstack((img,dst)))# 释放资源
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下:

八、闭运算

闭运算=膨胀+腐蚀

案例代码如下:

import cv2
import numpy as np# 导入图片
img = cv2.imread('6.jpg')# 卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))# 闭运算
dst = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel,iterations=2)# 展示图片
cv2.imshow('img',np.hstack((img,dst)))# 释放资源
cv2.waitKey(0)
cv2.destroyAllWindows()

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

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

相关文章

什么是Java的Apache Commons库?

首先,让我们来谈谈字符串处理。你知道吗,有时候我们需要从一段文本中提取出特定的信息,比如提取出一段字符串中的数字。这时候,我们可以使用Apache Commons Lang库中的NumberUtils类。不信?看这里,让我给你…

Flink简介及部署模式

文章目录 1、Flink简介2、Flink部署2.1 本地模式2.1 Standalone模式部署2.2 Standalone模式下的高可用2.3 Yarn模式Yarn模式的高可用配置:yarn模式中三种子模式的区别: 3、并行度4、提交命令执行指定任务Application Mode VS yarn per-job 5、注意事项5、…

4.1 Bootstrap UI 编辑器

文章目录 1. Bootstrap Magic2. BootSwatchr3. Bootstrap Live Editor4. Fancy Boot5. Style Bootstrap6. Lavish7. Bootstrap ThemeRoller8. LayoutIt!9. Pingendo10. Kickstrap11. Bootply12. X-editable13. Jetstrap14. DivShot15. PaintStrap 以下是 15 款最好的 Bootstrap…

Vue--微信和uniapp配置环境地址

一、uniapp 在uni-app中配置小程序的接口地址,可以按照以下步骤进行: 1.在uni-app项目的根目录下创建一个名为 ​config.js​的文件,并确保文件的后缀是 ​.js​。在 ​config.js​文件中定义不同运行环境下的接口地址。例如: …

2023C语言暑假作业day1

1 选择题 1 执行下面程序,正确的输出是 int x5,y7; void swap() { int z; zx; xy; yz; } int main() { int x3,y8; swap(); printf("%d,%d\n",x, y); return 0; }A: 5,7 B: 7,5 C: 3,8 D: 8,3 答案解析: 正确答案:C…

Linux的tcpdump命令详解

tcpdump 一款sniffer工具,是Linux上的抓包工具,嗅探器 补充说明 tcpdump命令 是一款抓包,嗅探器工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用-w选项将数据包保存到文件中,方便以后分析。…

基于Matlab自抗扰控制器及其PID控制(附上完整源码+数据)

文章目录 说明完整源码数据下载 说明 自抗扰控制器(Active Disturbance Rejection Control, ADRC)是一种新型的控制策略,它具有强大的抗干扰能力和良好的控制性能。与传统的PID控制器相比,ADRC能够更好地抑制系统的干扰&#xff…

ffplay播放器剖析(5)----视频输出剖析

文章目录 1.视频输出模块1.1 视频输出初始化1.1.1 视频输出初始化主要流程1.1.2 calculate_display_rect初始化显示窗口大小 1.2 视频输出逻辑1.2.1 event_loop开始处理SDL事件1.2.2 video_refresh1.2.2.1 计算上一帧显示时长,判断是否还要继续上一帧1.2.2.2 估算当前帧显示时长…

笔记本电脑的电池健康:确保长时间使用和优异性能的关键

笔记本电脑已经成为我们日常生活中不可或缺的工具,无论是办公、学习还是娱乐,我们都依赖着它的便携性和高效性能。而在所有的硬件组件中,电池健康被认为是确保长时间使用和良好性能的关键因素之一。一块健康的电池不仅能提供持久的续航时间&a…

CHI协议保序之Compack保序

一致性系统中,使用三种保序方式; Completion ack response ⭕Completion acknowledgment: □ 该域段主要是用来, □ 决定 RN 发送的 trans,与其他 RN 发送的命令产生的 SNP 之间的顺序; …

MySQL存储过程——系统变量

1.存储过程中的变量 1.1 查看系统变量 查看所有的系统变量 show variables;查看会话级别的系统变量 show session variables;查看会话和auto相关的变量 show session variables like auto%;查看全局的和auto相关变量 show global variables like auto%;查看某一…

R语言贝叶斯METROPOLIS-HASTINGS GIBBS 吉布斯采样器估计变点指数分布分析泊松过程车站等待时间...

原文链接:http://tecdat.cn/?p26578 指数分布是泊松过程中事件之间时间的概率分布,因此它用于预测到下一个事件的等待时间,例如,您需要在公共汽车站等待的时间,直到下一班车到了(点击文末“阅读原文”获取…

CPU,GPU,MCU,SOC,NPU,DPU,内核,架构简略区分

1.架构 架构由不同的指令集构成,不同的侧重方向的指令集构成不同的软件架构,如ARM架构和X86架构等。 2.内核 内核可以看做是不同的软件架构,铺设上一些外设之后构成,相当于软件架构的载体实现,架构是一堆软件代码&a…

ext4 - delay allocation数据结构

概述 延迟分配delay allocation是ext4非常重要的特性,启用该特性write系统将用户空间buffer写入内存page cache中即返回,此时也不会真正进行磁盘block分配,而是延迟到磁盘回写时(比如dirty ratio达到一定值,定时刷新&…

LeetCode笔记:Biweekly Contest 109

LeetCode笔记:Biweekly Contest 109 1. 题目一 1. 解题思路2. 代码实现 2. 题目二 1. 解题思路2. 代码实现 3. 题目三 1. 解题思路2. 代码实现 4. 题目四 1. 解题思路2. 代码实现 比赛链接:https://leetcode.com/contest/biweekly-contest-109/ 1. 题…

【华为c# OD机考参考答案】01---IPv4地址转换成整数

题目 1、题目 01---IPv4地址转换成整数2、解图思路 1、IP地址转为二进制 2、二进制转十进制 3、注意事项 1、IP地址的范围判断 2、空字符串判断 3、非法字符判断 4、考点 1、string的split 、convert等相关用法 2、正则表达式 3、进制转换 4、理解32位整数的意思 5、代码 判…

【NOSQL】MongoDB

MongoDB MongoDB简介体系结构Linux系统中的安装启动和连接(1)先到官网下载压缩包——>解压——>重命名新建几个目录,分别用来存储数据和日志:新建并修改配置文件官网下载MongoDB Compass MongoDB简介 MongoDB是一个开源、高…

MySQL 权限问题:当 USAGE 碰到 GRANT OPTION

本文分享的是 MySQL 中权限搭配使用不当时可能引发的问题。 作者:佟宇航 爱可生南区交付服务部 DBA 团队成员,主要负责 MySQL 故障处理以及平台技术支持。 本文来源:原创投稿 爱可生开源社区出品,原创内容未经授权不得随意使用&am…

【八股】【计算机网络】

这里写目录标题 OSI 的七层模型TCP/IP模型HTTP 是什么?HTTP状态码HTTP 常见字段GET 和 POST 有什么区别?GET 和 POST 方法都是安全和幂等的吗?HTTP 缓存HTTP 优缺点HTTP 性能HTTP 与 HTTPSHTTPSHTTPS连接过程与一定可靠吗HTTP演进版本HTTP/1.…

湖大CG满分教程:作业训练三编程题15. 公交系统

【问题描述】 城市公交系统有一个记录仪,用于记录每个站点的乘客人数的变化情况,例如:x表示到站前公交车上的乘客人数,y表示离站时公交车上的乘客人数,则该记录仪记录的该站的数字为y-x。 对于一辆公交车和n个车站&…