OpenCV(图像处理)-基于Python-形态学处理-开运算、闭运算、顶帽、黑帽运算

news2024/11/13 19:05:55

在这里插入图片描述

  • 1. 形态学
  • 2. 常用接口
    • 2.1 cvtColor()
    • 2.2 图像二值化
      • threshod()
      • 自适应阈值二值化
        • adaptiveThreshod()
    • 2.3 腐蚀与膨胀
      • erode()
      • getStructuringElement()
      • dilate()
    • 2.4开、闭、梯度、顶帽、黑帽运算
      • morphologyEx()

1. 形态学

OpenCV形态学是一种基于OpenCV库的数字图像处理技术,主要用于处理图像的形状、结构和空间关系。它包括一系列图像处理工具和算法,包括膨胀、腐蚀、开运算、闭运算、形态学梯度、顶帽、黑帽等。

通过对图像进行形态学操作可以实现一些重要的图像处理任务,比如去除噪声、分离图像中的对象、填充图像中的空洞、改变图像的形状、寻找图像中的轮廓等等。在OpenCV中,形态学操作通常采用二值图像进行处理,它可以通过C++或Python编程实现具体的形态学算法

2. 常用接口

在对图片进行相关操作之前,我们首先要先将彩色图片转变为灰度图像,方便图像的二值化。

2.1 cvtColor()

转换颜色通道的API
dst = cv2.cvtColor( img , cv2.COLOR_BGR2GRAY)
第二个参数为BGR图像转到灰度图像。

2.2 图像二值化

threshod()

该API能将灰度图像按照设定的阈值,将图像二值化。

ret ,dst = cv2.threshod( img, thresh, maxVal, type)
img:图像,最好是灰度图。
thresh:阈值(低于阈值为0,高于阈值的部分为maxVal)
maxVal:超过阈值的替换成maxVal
返回值有两个,第一个是使用的阈值,第二个是输出后的图像

type:

  • CV2.THRESH_BINARY
  • CV2.THRESH_BINARY_INV
  • CV2.THRESH_TRUNC
  • CV2.THRESH_TOZERO
  • CV2.THRESH_TOZERO_INV

在这里插入图片描述
上图显示了不同参数下,二值化的不同图像,第一个图为原始图像,后面的为不同的规则。


下列示例将一个灰度图分别以阈值100,180进行二值化。

import cv2
import numpy as np

img = cv2.imread('./image/lena_small.png')
# 将图片转换为灰度图
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 将阈值设为100,180
ret, img2 = cv2.threshold(img1, 100, 255, cv2.THRESH_BINARY)
ret1, img3 = cv2.threshold(img1, 180, 255, cv2.THRESH_BINARY)

cv2.imshow('orgin_img', img1)
cv2.imshow('img_100', img2)
cv2.imshow('img_180', img3)

cv2.waitKey(0)


在这里插入图片描述

自适应阈值二值化

有时候由于光照不均匀以及阴影的存在,有可能导致阴影部分的白色会被二值化为黑色,因此只有一个阈值的缺陷就暴露了出来。
在这里插入图片描述
用全局二值化,将阈值设置为180时,由于阴影的存在,会将阴影部分黑化,导致显示不完全。因次提出了自适应二值化的方法。

adaptiveThreshod()

dst = cv2.adaptiveThreshod(img, maxVal, adaptiveMethod, Type, blockSize, C)
img:需要二值化的图像(最好是灰度图
maxVal:超过阈值的像素设置成maxVal
adaptiveMethod:见下图
Type:为全局二值化的Type
blockSize:临近区域的大小,填奇数
C:常量,从计算的平均值或加权平均值中减去,一般为0

在这里插入图片描述

2.3 腐蚀与膨胀

腐蚀就是将一个图片关键部分“缩小“,膨胀将一个图形的关键部分放大。卷积核通常为全1的奇数矩阵。

在这里插入图片描述

在这里插入图片描述

erode()

原始图像中的一个像素无论是1还是0,只有当内核中的所用像素都是1时,结果才是1,否则结果就是0
dst = cv2.erode(img, kenel, iterations = 1)
img:要腐蚀的图像
kenel:卷积核,全1的矩阵
iterations:执行次数,默认为1次

在这里插入图片描述

getStructuringElement()

便捷API,帮助我们获得指定大小的卷积核
kernel = cv2.getStructuringElement(type, Size)
Type:MORPH_RECT(矩形);MORPH_ELLIPSE(椭圆形部分为1);MORPH_CROSS(十字架部分为1)
Size:(3, 3);(5, 5)…

import cv2
import numpy as np

img = cv2.imread('./image/j.png')

# 自己创建5*5的卷积核
# kernel = np.ones((5, 5), np.uint8)
# 获得卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
dst = cv2.erode(img, kernel)

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

cv2.waitKey(0)

在这里插入图片描述

dilate()

只要锚点非0,那么结果非0,卷积核越大,膨胀越大
dst = cv2.dilate(img, kernel, iterations = 1)
img:要膨胀的图像
kenel:卷积核,全1的矩阵
iterations:执行次数,默认为1次

import cv2
import numpy as np

img = cv2.imread('./image/j.png')

# 自己创建5*5的卷积核
# kernel = np.ones((5, 5), np.uint8)
# 获得卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
# # 腐蚀
# dst = cv2.erode(img, kernel)

# 膨胀
dst = cv2.dilate(img, kernel)

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

cv2.waitKey(0)

在这里插入图片描述

2.4开、闭、梯度、顶帽、黑帽运算

开运算:腐蚀+膨胀
闭运算:膨胀+腐蚀
梯度:原图-腐蚀
顶帽:原图-开运算
黑帽:原图-闭运算

morphologyEx()

dst = cv2.morphologyEx(img, Type, kernel)
img:进行操作的原图
kernel:噪点大,用大核

Type:

  • MORPH_OPEN/MORPH_CLOSE(开闭运算)
  • MORPH_GRADIENT(梯度运算)
  • MORPH_TOPHAT/MORPH_BLACKHAT(顶黑帽)

开运算:去除文字外的小噪点
在这里插入图片描述

闭运算:去除文字内的小噪点
在这里插入图片描述

梯度运算:获得文字的轮廓
在这里插入图片描述
顶帽:得到大图像外的小图形
在这里插入图片描述

黑帽:得到大图形内的小图形
在这里插入图片描述
以上就是形态学相关API的使用。

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

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

相关文章

React学习笔记(二)组件详解(上)

一、组件的概念: 当你开始学习 React 的时候,你会了解到 React 组件是 React 应用程序的基本构建块。组件是一个隔离的、可重复使用的代码块,由 HTML 元素、其他组件或自定义的 UI 元素组成,组件也就是react的核心思想&#xff0c…

python Flask web项目uwsgi + nginx部署

1.安装python 略 2.虚拟环境 2.1安装vertualenv pip3 install virtualenv2.2创建虚拟环境 创建保存环境的目录: mkdir venvs创建虚拟环境: [rootroot /]# virtualenv /home/xxx/venvs/flask2 --pythonpython3查看虚拟环境: [rootroot…

破万亿!英伟达的市值

文章目录 破万亿 🤨 英伟达的市值🤨 英伟达市值几近破万亿🤖 ChatGPT 伪造 6 个法律案例🗡️ AI 巨头的呼吁,是真担心还是想垄断?🏠 硅谷诈骗犯开启女性监狱新家📈 美国房价春季反弹…

有趣的图(五)(59)

小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 和猫妹学Python,一起趣味学编程。 今日主题 咱们今天继续学习图的应用,这些算法都是实际问题抽象出来的。 举个例子吧! 下面6个城市&a…

第八章ThreadLocal

文章目录 先看面试题什么是ThreadLocal能干嘛基本使用常用方法 使用ThreadLocal来解决使用sychronized解决ThreadLocal与synchronized的区别 强化理解数据隔离的意义为什么线程执行完要remove 运用场景_事务案例场景构建 引入事务JDBC中关于事务的操作的api常规解决方案常规方案…

javascript程序员简历模板(合集)

javascript程序员简历模板一 个人资料 姓 名: 性 别: 女 年 龄: 21 民 族: 汉族 户籍: 湖北 襄樊 最高学历: 本 科 现所在地: 广东 广州 毕业院校: 南京理工大学 所学专业&#xff1…

忘记 localStorage 吧,indexedDB 才是前端存储新宠!

前言 在项目开发过程中,前端需要存储大量的数据。cookie, localstorage 都有存储长度限制。表格一览 特性cookielocalStoragesessionStorageindexedDB数据生命周期一般由服务器生成,可以设置过期时间;前端采用和js-cookie等组件也可以生成除…

带货、文案策划看过来-让GPT30秒内帮你写出世界顶级文案

开篇 在这个充满竞争的市场环境中,一句响亮的品牌短语,往往能让消费者对你的品牌印象深入脑海。俗话说:“言短意赅,反而显得深邃。”这不正是品牌短语的形式特点吗?而这种言简意赅、朗朗上口的品牌短语,在中国市场上就显得尤为重要。因为它直击心灵,与消费者之间一夕之…

Fiddler 八个实用技巧

大家对Fiddler应该不会陌生,但里面有些技巧不见得都会,这里就有八个实用技巧,通过对Fiddler的定制,能提高大家的测试效率。 1、双击Session时,使响应页始终显示到”json”tab页;使请求页始终显示到“webfo…

【LLM GPT】李宏毅大型语言模型课程

目录 1 概述1.1 发展历程1.2 预训练监督学习预训练的好处 1.3 增强式学习1.4 对训练数据的记忆1.5 更新参数1.6 AI内容检测1.7 保护隐私1.8 gpt和bert穷人怎么用gpt 2 生成式模型2.1 生成方式2.1.1 各个击破 Autoregressive2.1.2 一次到位 Non-autoregressive2.1.3 两者结合 2.…

js包管理yarn与npm,yarn安装,yarn 不是内部或外部命令

目录 yarn与npm 优势 用法区别 安装yarn 报错 yarn 不是内部或外部命令 运行代码(yarn dev) yarn与npm yarn由Facebook为解决npm的一些问题而创建的 优势 快速 本地缓存并行下载 - Yarn并行下载,还可以直接从硬盘缓存中读取包&…

python3 爬虫相关学习8:python 的常见报错内容汇总(持续收集ing)

目录 1 低级错误(比如拼写错误等) 1.1 NameError: 1.2 属性错误 AttributeError: 属性拼写错误 2 应用错误(类型应用,属性使用的错误) 2.1 类型错误 TypeError: 如字符串连接错误 2.2 属性应用错误 Attribu…

【枚举区间思想+DP】子串的子序列

F-子串的子序列_牛客小白月赛62 (nowcoder.com) 题意: 思路: 复盘一下应该有的思路: 首先n^2枚举肯定超时,我们枚举的是一个区间 枚举区间有一些trick: 1.枚举其中一个右(左)端点&#xff…

基于simulink车辆动力学可视化仿真(附源码)

一、前言 车辆动力学是研究汽车在行驶过程中的运动学和力学特性的学科。它研究车辆在不同路面条件、不同驾驶情况下的加速、制动、转向等运动状态,并通过建立数学模型来分析和优化车辆的性能和安全性。车辆动力学是汽车工程、机械工程和物理学等学科的交叉领域&…

【C语言11】文件操作(fgtec,fputc,fgets,fputs,fscanf,fprintf)

1.什么是文件 磁盘上的文件是文件。 但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。 程序文件 包括源程序文件(后缀为.c),目标文件(windows环境后…

unittest教程__expectedFailure预期用例失败(5)

在断言用例执行结果时,会出现预期结果与实际结果不一致的情况,此时我们明确知道用例执行结果为FAIL,不想看到打印错误信息怎么办? 使用装饰器unittest.expectedFailure标记该用例。 import unittestclass Demo(unittest.TestCas…

Tcl常用命令备忘录-format与scan

format 语法:format formatString arg arg ... 参数介绍: formatString:格式化字符串,使用各种标识符和修饰符进行格式化。arg:被格式化的变量或字符串。 Tcl语言中的format命令可以用来格式化字符串输出&#xff…

Autosar代码解析-Source Insight的使用

文章目录 一、Source Insight简介二、Autosar代码查看三、解决办法一、Source Insight简介 Source insight是一款简洁、强大的轻量级代码浏览编辑器,启动快、使用便捷,很多程序员应该都使用过!它几乎支持所有的语言,比如C、C++、ASMA汇编、HTML等,能创建并维护其高性能的符…

【软件测试】性能测试服务端—排查指标问题(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 软件性能测试的目…

【数据类型】C#和Sql Server、Mysql、Oracle等常见数据库的数据类型对应关系

🏆🏆这是小5写的第二篇城市领跑者文章,一起为所在城市领跑助力吧! 🏆🏆在实际项目中,不管是用C#后端编程语言也好,还是Java后端编程语言,都可能会用到不同端的数据类型转…