当前位置: 首页 > news >正文

opencv-形态学处理

通过阈值化分割可以得到二值图,但往往会出现图像中物体形态不完整,变的残缺,可以通过形态学处理,使其变得丰满,或者去除掉多余的像素。常用的形态学处理算法包括:腐蚀,膨胀,开运算,闭运算,形态学梯度,顶帽运算和底帽运算。
1. 腐蚀
腐蚀操作类似于中值平滑,也有一个核,但不进行卷积运算,而是取核中像素值的最小值代替锚点位置的像素值,这样就会使图像中较暗的区域面积增大,较亮的的区域面积减小。如果是一张黑底,白色前景的二值图,就会使白色的前景物体颜色变小,就像被腐蚀了一样。

#coding:utf-8
import cv2 as cv
img = cv.imread(r"C:\Users\mzd\Desktop\opencv\images.jpg")
img_cvt = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
ret,img_thr = cv.threshold(img_cvt,200,255,cv.THRESH_BINARY_INV)
#cv2.threshold() 是 OpenCV 中用于图像阈值处理的函数。阈值处理是一种将图像转换为二值图像的方法,通过将像素值与一个预先定义的阈值进行比较,将像素分为两个类别:大于阈值的为一类,小于等于阈值的为另一类。
kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,5))
#cv2.getStructuringElement() 是 OpenCV 中用于创建结构元素的函数,常用于形态学操作(如腐蚀和膨胀)。结构元素是一个小的形状,它在图像上滑动,用于改变图像的形状。
dst = cv.erode(img_thr,kernel,iterations=1)
cv.imshow("img",img)
cv.imshow("img_thr",img_thr)
cv.imshow("dst",dst)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述cv2.erode() 是 OpenCV 中用于进行腐蚀操作的函数。腐蚀是形态学操作的一种,它通过在图像中滑动结构元素(kernel)来减小图像中的白色区域(前景对象)。它常常被用于去除图像中的小白色噪声或者分离两个连接在一起的物体。 (白色的目标变小,相反黑色的目标变大),腐蚀操作将减小图像中的白色区域,可以用于去除小的白色噪声或者分离连接在一起的物体。

基本语法如下:

erosion = cv2.erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])

参数说明:

  • src: 输入图像,单通道二进制图像(黑白图像)。
  • kernel: 结构元素,可以使用 cv2.getStructuringElement() 创建。
  • dst(可选): 输出图像。
  • anchor(可选): 结构元素的锚点,默认为 (-1, -1) 表示结构元素的中心。
  • iterations(可选): 腐蚀的迭代次数,默认为1。
  • borderType(可选): 边界处理的方式,通常为默认值 cv2.BORDER_CONSTANT
  • borderValue(可选): 边界的填充值,默认为0。

2.膨胀
膨胀操作和腐蚀操作正好相反,是取核中像素值的最大值代替锚点位置的像素值,这样会使图像中较亮的区域增大,较暗的区域减小。如果是一张黑底,白色前景的二值图,就会使白色的前景物体颜色面积变大,就像膨胀了一样。

#coding:utf-8
import cv2 as cv
img = cv.imread(r"C:\Users\mzd\Desktop\opencv\images.jpg")
img_cvt = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
ret,img_thr = cv.threshold(img_cvt,200,255,cv.THRESH_BINARY_INV)
#cv2.threshold() 是 OpenCV 中用于图像阈值处理的函数。阈值处理是一种将图像转换为二值图像的方法,通过将像素值与一个预先定义的阈值进行比较,将像素分为两个类别:大于阈值的为一类,小于等于阈值的为另一类。
kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,5))
#cv2.getStructuringElement() 是 OpenCV 中用于创建结构元素的函数,常用于形态学操作(如腐蚀和膨胀)。结构元素是一个小的形状,它在图像上滑动,用于改变图像的形状。
dst = cv.dilate(img_thr,kernel,iterations=1)cv.imshow("img",img)
cv.imshow("img_thr",img_thr)
cv.imshow("dst",dst)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述
cv2.dilate() 是 OpenCV 中用于进行膨胀操作的函数。膨胀是形态学操作的一种,它通过在图像中滑动结构元素(kernel)来增加图像中的白色区域(前景对象)。膨胀操作将增加图像中的白色区域膨胀常常被用于连接图像中的白色区域或者扩展物体的大小。

基本语法如下:

dilation = cv2.dilate(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])

参数说明:

  • src: 输入图像,单通道二进制图像(黑白图像)。
  • kernel: 结构元素,可以使用 cv2.getStructuringElement() 创建。
  • dst(可选): 输出图像。
  • anchor(可选): 结构元素的锚点,默认为 (-1, -1) 表示结构元素的中心。
  • iterations(可选): 膨胀的迭代次数,默认为1。
  • borderType(可选): 边界处理的方式,通常为默认值 cv2.BORDER_CONSTANT
  • borderValue(可选): 边界的填充值,默认为0。

3.开运算,闭运算,顶帽,顶帽

  1. 开运算:先进行腐蚀操作,后进行膨胀操作,主要用来去除一些较亮的部分,即先腐蚀掉不要的部分,再进行膨胀。
  2. 闭运算:先进行膨胀操作,后进行腐蚀操作,主要用来去除一些较暗的部分。
  3. 形态学梯度:膨胀运算结果减去腐蚀运算结果,可以拿到轮廓信息。
  4. 顶帽运算:原图像减去开运算结果。
  5. 底帽运算:原图像减去闭运算结果。
 #coding:utf-8
import cv2 as cv
import matplotlib.pyplot as plt
img = cv.imread(r"C:\Users\mzd\Desktop\opencv\images.jpg")
img_cvt = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
#cv2.cvtColor() 是 OpenCV 中用于进行颜色空间转换的函数。颜色空间转换是图像处理中常见的操作,用于将图像从一种颜色表示转换为另一种。常见的颜色空间包括灰度空间、RGB空间、HSV空间等。
ret,img_thr = cv.threshold(img_cvt,200,255,cv.THRESH_BINARY_INV)
#cv2.threshold() 是 OpenCV 中用于图像阈值处理的函数。阈值处理是一种将图像转换为二值图像的方法,通过将像素值与一个预先定义的阈值进行比较,将像素分为两个类别:大于阈值的为一类,小于等于阈值的为另一类。
kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,5))
#cv2.getStructuringElement() 是 OpenCV 中用于创建结构元素的函数,常用于形态学操作(如腐蚀和膨胀)。结构元素是一个小的形状,它在图像上滑动,用于改变图像的形状。
open = cv.morphologyEx(img_thr,cv.MORPH_OPEN,kernel,iterations=1)
#cv2.morphologyEx()是OpenCV 中进行形态学操作的函数,它可以实现一些基本的形态学操作,如膨胀、腐蚀、开运算、闭运算等。形态学操作主要用于图像处理中的形状分析和图像变换。cv2.MORPH_OPEN: 开运算(先腐蚀后膨胀。
close = cv.morphologyEx(img_thr,cv.MORPH_CLOSE,kernel,iterations=1)
#cv2.morphologyEx()是OpenCV 中进行形态学操作的函数,它可以实现一些基本的形态学操作,如膨胀、腐蚀、开运算、闭运算等。形态学操作主要用于图像处理中的形状分析和图像变换。cv2.MORPH_CLOSE: 闭运算(先膨胀后腐蚀)
gradient = cv.morphologyEx(img_thr,cv.MORPH_GRADIENT,kernel,iterations=1)
#cv2.MORPH_GRADIENT: 梯度运算(膨胀图减去腐蚀图)。
tophat = cv.morphologyEx(img_thr,cv.MORPH_TOPHAT,kernel,iterations=1)
#cv2.MORPH_TOPHAT: 顶帽运算(原始图像减去开运算图像)。
blackhat = cv.morphologyEx(img_thr,cv.MORPH_BLACKHAT,kernel,iterations=1)
#cv2.MORPH_BLACKHAT: 黑帽运算(闭运算图像减去原始图像)。
images=[img_thr,open,close,gradient,tophat,blackhat]
titles=["img_thr","open","close","gradient","tophat","blackhat"]
for i in range(6):plt.subplot(2,3,i+1),plt.imshow(images[i],"gray")plt.title(titles[i])plt.xticks([]),    plt.yticks([])
plt.show()

在这里插入图片描述
cv2.morphologyEx() 是 OpenCV 中进行形态学操作的函数,它可以实现一些基本的形态学操作,如膨胀、腐蚀、开运算、闭运算等。形态学操作主要用于图像处理中的形状分析和图像变换。

基本语法如下:

dst = cv2.morphologyEx(src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])

参数说明:

  • src: 输入图像。
  • op: 形态学操作的类型,可以是以下之一:
    • cv2.MORPH_OPEN: 开运算(先腐蚀后膨胀)。
    • cv2.MORPH_CLOSE: 闭运算(先膨胀后腐蚀)。
    • cv2.MORPH_GRADIENT: 梯度运算(膨胀图减去腐蚀图)。
    • cv2.MORPH_TOPHAT: 顶帽运算(原始图像减去开运算图像)。
    • cv2.MORPH_BLACKHAT: 黑帽运算(闭运算图像减去原始图像)。
  • kernel: 结构元素,可以使用 cv2.getStructuringElement() 创建。
  • dst(可选): 输出图像。
  • anchor(可选): 结构元素的锚点,默认为 (-1, -1) 表示结构元素的中心。
  • iterations(可选): 迭代次数,默认为1。
  • borderType(可选): 边界处理的方式,通常为默认值 cv2.BORDER_CONSTANT
  • borderValue(可选): 边界的填充值,默认为0。

相关文章:

opencv-形态学处理

通过阈值化分割可以得到二值图,但往往会出现图像中物体形态不完整,变的残缺,可以通过形态学处理,使其变得丰满,或者去除掉多余的像素。常用的形态学处理算法包括:腐蚀,膨胀,开运算&a…...

手把手设计C语言版循环队列(力扣622:设计循环队列)

文章目录 前言描述分析力扣AC代码 力扣: 622.设计循环队列 前言 队列会出现“假溢出”现象,即队列的空间有限,队列是在头和尾进行操作的,当元素个数已经达到最大个数时,队尾已经在空间的最后面了,但是对头…...

数据仓库及ETL的理论基础

数据仓库(Data Warehouse)是一个用于存储和管理大量结构化数据的系统,旨在支持企业的决策制定过程。它是一个集成的、主题导向的、时间变化的、非易失性的数据集合,用于支持企业的决策制定过程。数据仓库的设计目标是提供高性能的…...

5-4计算一串字符的空格数字字符其他

#include<stdio.h> int main(){char c;int space0;//空格int letters0;//英文字母int numbers0;//数字int others0;//其他字符printf("请输入一行字符&#xff1a;");while((cgetchar())!\n)//获取字符的内容&#xff0c;到\n停止{if(c>a&&c<z|…...

leetcode面试经典150题——30 长度最小的子数组

题目&#xff1a;长度最小的子数组 描述&#xff1a; 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&a…...

学习计划计划执行记录

11.21--写下学习目标 游戏行业通识学习&#xff1a; 求知鱼游戏学院的个人空间-求知鱼游戏学院个人主页-哔哩哔哩视频 (bilibili.com) (28 封私信 / 80 条消息) 游鲨游戏圈 - 知乎 (zhihu.com) 书籍学习&#xff1a; 软技能2&#xff1a;软件开发者职业生涯指南 面经学习…...

【紫光同创PCIE教程】——使用WinDriver驱动紫光PCIE

本原创教程由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注www.meyesemi.com) 紫光的logos系列的PGL50H/PGL100H、logos-2全系列都集成gen24的PCIE硬核&#xff0c;且官方也提供了例程。 紫光的PCIE用起来还是挺方便的…...

MT8735/MTK8735安卓核心板规格参数介绍

MT8735核心板是一款高性能的64位Cortex-A53四核处理器&#xff0c;设计用于在4G智能设备上运行安卓操作系统。这款多功能核心板支持LTE-FDD/LTE-TDD/WCDMA/TD-SCDMA/EVDO/CDMA/GSM等多种网络标准&#xff0c;同时还具备WiFi 802.11a/b/g/n和BT4.0LE等无线通信功能。此外&#x…...

NSSCTF web刷题记录6

文章目录 [HZNUCTF 2023 final]eznode[MoeCTF 2021]地狱通讯-改[红明谷CTF 2022] Smarty Calculator方法一 CVE-2021-26120方法二 CVE-2021-29454方法三 写马蚁剑连接 [HZNUCTF 2023 final]eznode 考点&#xff1a;vm2沙箱逃逸、原型链污染 打开题目&#xff0c;提示找找源码 …...

米哈游大数据云原生实践

云布道师 近年来&#xff0c;容器、微服务、Kubernetes 等各项云原生技术的日渐成熟&#xff0c;越来越多的公司开始选择拥抱云原生&#xff0c;并将企业应用部署运行在云原生之上。随着米哈游业务的高速发展&#xff0c;大数据离线数据存储量和计算任务量增长迅速&#xff0c…...

移动端适配-(postcss-pxtorem)

基于vuevant的移动端适配(rem) 1.下载lib-flexible --save npm i lib-flexible --save2.在main.js中引入lib-flexible main.js import lib-flexible/flexible3.设置meta标签 <meta name"viewport" content"widthdevice-width, initial-scale1, maximum-s…...

【PostgreSQL】解决PostgreSQL时区(TimeZone)问题

问题描述 最近在使用PostgreSQL中&#xff0c;对行记录进行设置创建时间&#xff08;created_time&#xff09;时&#xff0c;出现了设置了now()时间而数据库中写入的数据是不一致的数据。 eg&#xff1a; insert into dept ( created_at, updated_at) VALUES (now(),now())…...

Vue Router的使用

Vue.js是一个流行的JavaScript框架&#xff0c;用于开发单页面应用程序。Vue提供了一个强大的路由系统&#xff0c;可以帮助我们管理应用程序中的不同页面。在本文中&#xff0c;我们将详细讲解Vue路由的使用方法。 目录 1. 安装Vue Router2. 创建路由实例3. 配置路由4. 在模板…...

海外IP代理科普——API代理

随着互联网的不断发展&#xff0c;越来越多的企业开始使用API&#xff08;应用程序接口&#xff09;来实现数据的共享和交流。而在API使用中&#xff0c;海外代理IP也逐渐普及。那么&#xff0c;什么是API代理IP呢&#xff1f;它有什么作用&#xff1f;API接口有何用处&#xf…...

详解Python安装requests库的实例代码

文章目录 前言基本用法基本的get请求带参数的GET请求解析json关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 前…...

Flutter 使用 device_info_plus 遇到的问题

问题&#xff1a;引用device_info_plus 插件出现了异常&#xff0c;不知道为啥打开项目的时候就不能用了。 解决&#xff1a;改了版本解决 Target of URI doesnt exist: package:device_info_plus/device_info_plus.dart. (Documentation) Try creating the file reference…...

论文阅读:“基于特征检测与深度特征描述的点云粗对齐算法”

文章目录 摘要简介相关工作粗对齐传统的粗对齐算法基于深度学习的粗对齐算法 特征检测及描述符构建 本文算法ISS 特征检测RANSAC 算法3DMatch 算法 实验结果参考文献 摘要 点云对齐是点云数据处理的重要步骤之一&#xff0c;粗对齐则是其中的难点。近年来&#xff0c;基于深度…...

[python]python筛选excel表格信息并保存到另一个excel

目录 关键词平台说明背景所需库1.安装相关库2.代码实现sourcetarget1 关键词 python、excel、DBC、openpyxl 平台说明 项目Valuepython版本3.6 背景 从一个excel表中遍历删选信息并保存到另一个excel表 所需库 1.openpyxl &#xff1a;是一个用于读写 Excel 文件的 Pyt…...

使用kafka_exporter监控Kafka

prometheus 监控 kafka 常见的有两种开源方案,一种是传统的部署 exporter 的方式,一种是通过 jmx 配置监控, 项目地址: kafka_exporter:https://github.com/danielqsj/kafka_exporterjmx_exporter:https://github.com/prometheus/jmx_exporter本文将采用kafka_exporter方…...

基于Bagging集成学习方法的情绪分类预测模型研究(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…...

HoRain云--汇编语言数组操作全解析

&#x1f3ac; HoRain云小助手&#xff1a;个人主页 &#x1f525; 个人专栏: 《Linux 系列教程》《c语言教程》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站&#xff0c;性价比超高&#xff0c;大内存超划算&#xff01;…...

CANN/pyasc ib_wait函数文档

asc.language.basic.ib_wait 【免费下载链接】pyasc 本项目为Python用户提供算子编程接口&#xff0c;支持在昇腾AI处理器上加速计算&#xff0c;接口与Ascend C一一对应并遵守Python原生语法。 项目地址: https://gitcode.com/cann/pyasc asc.language.basic.ib_wait(g…...

终极鼠标性能测试指南:3步精准评估您的设备表现

终极鼠标性能测试指南&#xff1a;3步精准评估您的设备表现 【免费下载链接】MouseTester 项目地址: https://gitcode.com/gh_mirrors/mo/MouseTester 想要知道您的鼠标是否真的物有所值&#xff1f;MouseTester——这款专业级鼠标性能测试工具&#xff0c;为您提供精确…...

Windows驱动存储管理完整指南:DriverStore Explorer终极使用教程

Windows驱动存储管理完整指南&#xff1a;DriverStore Explorer终极使用教程 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer DriverStore Explorer&#xff08;又称RAPR&#xff09;是一…...

车载以太网之要火系列 - 番外篇4:从DoIP到SOME/IP,一个初学者的“越级碰瓷”

写在开篇今晚有点晚&#xff0c;来不及学多少了&#xff0c;但还得来凑点字数。DoIPUDS的35篇笔记&#xff0c;终于边学边写&#xff0c;搞完了。从第21篇到第35篇&#xff0c;说实话&#xff0c;学得并不轻松。有些地方到现在还是迷迷糊糊的——比如27服务那几级权限&#xff…...

从零构建操作系统内核:nokodo-labs/os1项目核心架构与实现解析

1. 项目概述&#xff1a;一个开源操作系统内核的诞生最近在开源社区里&#xff0c;一个名为nokodo-labs/os1的项目引起了我的注意。乍一看&#xff0c;这只是一个托管在代码平台上的仓库名&#xff0c;但“os1”这个后缀&#xff0c;对于任何一个有经验的开发者来说&#xff0c…...

从图像到ASCII艺术:Python实现终端字符画生成原理与实践

1. 项目概述&#xff1a;当终端遇上艺术&#xff0c;ASCII艺术守护者作为一名长期在运维、开发和命令行界面&#xff08;CLI&#xff09;中摸爬滚打的从业者&#xff0c;我深知终端输出的单调与枯燥。无论是查看日志、监控进程&#xff0c;还是运行脚本&#xff0c;满屏的纯文本…...

运放有源滤波器实战:精准抑制EMI,提升信号完整性

1. 项目概述&#xff1a;当运算放大器遇上电磁干扰在电子设计的江湖里&#xff0c;电磁干扰&#xff08;EMI&#xff09;就像无处不在的“背景噪音”&#xff0c;它不请自来&#xff0c;总想在你精心设计的模拟或数字信号上留下点“印记”。无论是高精度的传感器前端&#xff0…...

ClawSwap SDK开发指南:从架构设计到DeFi集成实战

1. 项目概述&#xff1a;一个专为ClawSwap设计的SDK如果你正在DeFi世界里寻找一个能让你快速接入特定去中心化交易所&#xff08;DEX&#xff09;的工具&#xff0c;那么你很可能已经接触过各种“SDK”&#xff08;软件开发工具包&#xff09;。今天要聊的这个WarTech9/clawswa…...

超越官方文档:手把手教你用MMDet3D+PointNet++复现S3DIS分割SOTA结果,并深度解析可视化效果

超越官方文档&#xff1a;手把手教你用MMDet3DPointNet复现S3DIS分割SOTA结果&#xff0c;并深度解析可视化效果 在三维点云分割领域&#xff0c;S3DIS数据集一直是评估室内场景理解算法性能的重要基准。本文将带您深入探索如何利用MMDetection3D框架和PointNet模型&#xff0c…...