OpenCV 计算机视觉:图像膨胀与腐蚀,图像边缘检测

发布时间:2026/8/5 2:39:29

OpenCV 计算机视觉:图像膨胀与腐蚀,图像边缘检测
OpenCV 入门图像形态学与边缘检测今天的课程主要学习了图像形态学和边缘检测。图像形态学主要处理物体的形状和结构例如去除噪声、填补空洞、连接断裂区域边缘检测则用于寻找图像中灰度变化明显的位置帮助我们提取物体轮廓。这两类操作是计算机视觉中非常重要的基础知识后续的轮廓检测、目标识别和图像分割都可能用到它们。一、什么是图像形态学图像形态学是一类基于图像形状的处理方法通常需要使用一个小矩阵扫描图像。这个小矩阵叫作结构元素也可以理解为形态学运算中的kernel。例如import numpy as np kernel np.ones( (3, 3), np.uint8 )这里创建了一个3×3的结构元素1 1 1 1 1 1 1 1 1结构元素的大小和形状会影响处理结果结构元素越大处理效果通常越明显迭代次数越多腐蚀或膨胀程度越明显不同形状的结构元素可能得到不同结果。常见的形态学操作包括腐蚀膨胀开运算闭运算形态学梯度顶帽黑帽。二、图像腐蚀腐蚀可以理解为让前景区域变小或者让白色物体的边界向内收缩。使用cv2.erode()import cv2 import numpy as np image cv2.imread( sun.png, cv2.IMREAD_GRAYSCALE ) kernel np.ones( (3, 3), np.uint8 ) erosion cv2.erode( image, kernel, iterations1 ) cv2.imshow(original, image) cv2.imshow(erosion, erosion) cv2.waitKey(0) cv2.destroyAllWindows()iterations表示腐蚀执行的次数erosion_1 cv2.erode( image, kernel, iterations1 ) erosion_3 cv2.erode( image, kernel, iterations3 )通常来说迭代次数越多白色区域被削弱得越明显。腐蚀可以用于去除小的白色噪声断开粘连的物体缩小目标轮廓去除细小的突出部分。需要注意腐蚀的效果与前景颜色有关。通常在二值图中把白色区域作为前景、黑色区域作为背景。三、图像膨胀膨胀与腐蚀相反它会让前景区域变大让白色物体的边界向外扩张。使用cv2.dilate()dilation cv2.dilate( image, kernel, iterations1 ) cv2.imshow(dilation, dilation) cv2.waitKey(0) cv2.destroyAllWindows()膨胀可以用于填补物体中的小空洞连接相互接近的区域加粗文字和线条修复断裂的边缘。例如文字图像中某些笔画断开了可以使用膨胀将它们连接起来text cv2.imread( wenzi.png, cv2.IMREAD_GRAYSCALE ) kernel np.ones( (2, 2), np.uint8 ) text_dilation cv2.dilate( text, kernel, iterations2 )腐蚀和膨胀并不是简单地把所有像素变黑或变白而是根据结构元素覆盖范围内的像素关系决定当前像素的结果。四、开运算开运算是先腐蚀再膨胀OpenCV 中使用opening cv2.morphologyEx( image, cv2.MORPH_OPEN, kernel )代码如下opening cv2.morphologyEx( image, cv2.MORPH_OPEN, kernel, iterations1 )开运算的主要作用是去除小的白色噪声平滑物体轮廓断开较窄的连接去除细小的突出部分。例如二值图像中存在很多零散的小白点可以先使用开运算进行清理。开运算先腐蚀会去除小区域再进行膨胀使主要目标大致恢复原来的大小。因此开运算相比单独腐蚀更加温和。五、闭运算闭运算是先膨胀再腐蚀使用closing cv2.morphologyEx( image, cv2.MORPH_CLOSE, kernel )闭运算的主要作用是填补目标内部的小孔洞连接较窄的断裂区域弥合轮廓中的细小间隙让目标轮廓更加完整。例如在指纹、文字或物体轮廓图中如果线条中间出现断裂可以使用闭运算进行修复fingerprint cv2.imread( zhiwen_duan.png, cv2.IMREAD_GRAYSCALE ) closing cv2.morphologyEx( fingerprint, cv2.MORPH_CLOSE, kernel )开运算更擅长“去除小的白色区域”闭运算更擅长“填补小的黑色区域”。实际选择哪一种需要观察噪声和目标的具体情况。六、顶帽和黑帽顶帽运算的公式是顶帽 原始图像 - 开运算结果使用tophat cv2.morphologyEx( image, cv2.MORPH_TOPHAT, kernel )顶帽可以提取比周围区域更亮的细节。例如在不均匀背景中提取明亮的小目标。黑帽运算的公式是黑帽 闭运算结果 - 原始图像使用blackhat cv2.morphologyEx( image, cv2.MORPH_BLACKHAT, kernel )黑帽可以提取比周围区域更暗的细节。简单理解顶帽突出亮目标黑帽突出暗目标开运算去除小亮区域闭运算填补小暗区域。七、什么是边缘检测边缘通常出现在图像亮度变化剧烈的位置例如黑白物体的交界处物体与背景的边界文字轮廓边缘检测的本质是计算图像像素值变化的速度。像素变化越剧烈越可能是边缘。边缘检测常用于提取物体轮廓目标检测形状识别文字识别图像分割。常见方法包括Sobel 算子Scharr 算子Laplacian 算子Canny 算法。八、Sobel 算子Sobel 算子会分别计算水平方向和垂直方向的像素变化。基本格式cv2.Sobel( src, ddepth, dx, dy, ksize3 )其中src输入图像ddepth输出图像的数据深度dxx 方向导数的阶数dyy 方向导数的阶数ksize算子大小常见为 3、5、7。读取灰度图gray cv2.imread( yuan.png, cv2.IMREAD_GRAYSCALE )计算 x 方向边缘sobel_x cv2.Sobel( gray, cv2.CV_64F, dx1, dy0 )计算 y 方向边缘sobel_y cv2.Sobel( gray, cv2.CV_64F, dx0, dy1 )最后需要将结果转换为可以显示的 8 位图像sobel_x cv2.convertScaleAbs( sobel_x ) sobel_y cv2.convertScaleAbs( sobel_y )也可以将两个方向的结果加权组合sobel_xy cv2.addWeighted( sobel_x, 1, sobel_y, 1, 0 )九、为什么使用 CV_64F图像像素通常是uint8取值范围是 0255。但 Sobel 计算的是像素变化结果可能出现负数。如果直接使用cv2.Sobel( gray, -1, 1, 0 )负数可能因为数据类型限制无法正常保存导致部分边缘信息丢失。因此课程代码中使用cv2.CV_64F让结果可以保存负数sobel_x_64 cv2.Sobel( gray, cv2.CV_64F, 1, 0 )然后通过convertScaleAbs()取绝对值并转换为适合显示的格式sobel_x cv2.convertScaleAbs( sobel_x_64 )这是使用 Sobel 时非常容易忽略的细节。十、Scharr 算子Scharr 算子可以看作 Sobel 算子在3×3核大小下的优化版本。使用方法scharr_x cv2.Scharr( gray, cv2.CV_64F, dx1, dy0 ) scharr_y cv2.Scharr( gray, cv2.CV_64F, dx0, dy1 ) scharr_x cv2.convertScaleAbs( scharr_x ) scharr_y cv2.convertScaleAbs( scharr_y )Scharr 在处理细小边缘时通常比3×3的 Sobel 更准确速度与 Sobel 接近。简单对比Sobel使用灵活可以选择不同大小的算子Scharr主要用于3×3情况边缘精度通常更高两者都可以计算 x 方向和 y 方向的梯度。十一、Laplacian 算子Sobel 和 Scharr 会分别计算 x、y 两个方向而 Laplacian 直接计算图像变化的二阶导数。使用laplacian cv2.Laplacian( gray, cv2.CV_64F, ksize3 ) laplacian cv2.convertScaleAbs( laplacian )Laplacian 不需要分别设置dx和dy因为它会综合各个方向的变化。它对噪声比较敏感因此实际使用中通常先进行高斯滤波blurred cv2.GaussianBlur( gray, (3, 3), 0 ) laplacian cv2.Laplacian( blurred, cv2.CV_64F )十二、Canny 边缘检测Canny 是一种效果较好的边缘检测算法edges cv2.Canny( gray, 100, 150 )其中100是低阈值150是高阈值。Canny 通常包括四个主要步骤1. 图像降噪先使用高斯滤波去除噪声防止噪声被误认为边缘。2. 梯度计算通常使用 Sobel 算子计算像素变化的大小和方向。3. 非极大值抑制一条边缘可能比较粗需要保留梯度方向上的最大值把其他非最大值抑制为 0从而得到更细的边缘。4. 双阈值边界跟踪Canny 使用高阈值和低阈值对边缘进行筛选高于高阈值强边缘直接保留低于低阈值不是边缘直接删除位于两个阈值之间根据是否连接到强边缘决定是否保留。完整示例import cv2 image cv2.imread( zl.png ) gray cv2.cvtColor( image, cv2.COLOR_BGR2GRAY ) blurred cv2.GaussianBlur( gray, (5, 5), 0 ) edges cv2.Canny( blurred, 100, 150 ) cv2.imshow(gray, gray) cv2.imshow(edges, edges) cv2.waitKey(0) cv2.destroyAllWindows()如果阈值过低噪声和无关细节会被检测出来如果阈值过高一些真实边缘可能被忽略。因此阈值需要根据图像实际情况调整。十三、形态学和边缘检测的综合流程实际项目中通常不会只使用一个函数而是将多个处理步骤组合起来读取图像 ↓ 转换为灰度图 ↓ 高斯滤波降噪 ↓ Canny边缘检测 ↓ 形态学膨胀或闭运算 ↓ 提取完整目标边缘对应代码如下import cv2 import numpy as np image cv2.imread( zl.png ) gray cv2.cvtColor( image, cv2.COLOR_BGR2GRAY ) blurred cv2.GaussianBlur( gray, (5, 5), 0 ) edges cv2.Canny( blurred, 80, 150 ) kernel np.ones( (3, 3), np.uint8 ) edges_closed cv2.morphologyEx( edges, cv2.MORPH_CLOSE, kernel ) cv2.imshow(original, image) cv2.imshow(edges, edges) cv2.imshow(closed edges, edges_closed) cv2.waitKey(0) cv2.destroyAllWindows()这种流程可以用于提取物体轮廓、检测文字边缘和分析简单形状。十四、总结今天的课程主要学习了图像形态学和边缘检测。形态学操作依赖结构元素kernel。腐蚀会缩小前景区域膨胀会扩大前景区域。开运算是先腐蚀后膨胀适合去除小噪声闭运算是先膨胀后腐蚀适合填补空洞和连接断裂区域。形态学梯度可以突出轮廓顶帽用于提取亮细节黑帽用于提取暗细节。边缘检测则是寻找像素变化剧烈的位置。Sobel 分别计算 x、y 方向的梯度Scharr 是 Sobel 在3×3情况下的优化Laplacian 直接计算二阶变化Canny 则通过降噪、梯度计算、非极大值抑制和双阈值跟踪得到较细的边缘。图像处理通常不是一步完成的而是根据任务组合多个操作灰度化 → 滤波降噪 → 边缘检测 → 形态学修复掌握这些基础后就可以继续学习轮廓检测、目标定位、形状识别和图像分割。

相关新闻

UEFI固件PEI阶段核心机制:PEIM、PPI与HOB深度解析

UEFI固件PEI阶段核心机制:PEIM、PPI与HOB深度解析

2026/8/5 2:29:29

1. 项目概述:深入理解PEI阶段的基石如果你在UEFI固件开发或者系统底层启动流程的调试中摸爬滚打过,那么对“PEI阶段”这个词一定不会陌生。它就像是系统上电后,CPU从沉睡中苏醒,开始执行的第一段“热身操”。这个阶段环境极其简陋…

One Spark全栈式AI工程化平台:从零构建智能知识库助手实战指南

One Spark全栈式AI工程化平台:从零构建智能知识库助手实战指南

2026/8/5 2:29:29

如果你是一位开发者,正在寻找一个能帮你快速构建、部署和迭代AI应用的平台,那么你很可能已经听说过“One Spark”这个名字。它最近在技术社区里被频繁提及,但很多人对它的理解还停留在“又一个AI工具”的层面。这其实错过了一个关键点&#x…

游戏存档修改实战:从十六进制编辑到逆向工程思维

游戏存档修改实战:从十六进制编辑到逆向工程思维

2026/8/5 2:29:29

1. 项目概述:从“C1试验 01”看游戏存档修改的底层逻辑看到“C1试验 01 修改游戏存档”这个标题,很多朋友可能会心一笑。这像极了一个技术爱好者或游戏玩家在个人笔记里随手记下的一个实验项目代号。它背后所指向的,是一个在单机游戏和独立游…

汇编语言:程序员性能调优与系统调试的底层利器

汇编语言:程序员性能调优与系统调试的底层利器

2026/8/5 6:29:47

1. 从一行C代码说起:我们到底在学什么?如果你写过C语言,一定对int a b c;这样的语句再熟悉不过。编译器会把它变成机器指令,最终在CPU上执行。但你想过没有,这行简单的加法,在CPU眼里究竟是怎么一回事&am…

WSL2 SSH服务配置全攻略:从零搭建稳定远程连接

WSL2 SSH服务配置全攻略:从零搭建稳定远程连接

2026/8/5 6:29:47

1. 为什么要在WSL里折腾SSH?如果你和我一样,日常工作离不开Windows,但开发、运维的“主战场”又在Linux,那么Windows Subsystem for Linux(WSL)绝对是个神器。它让你能在Windows里无缝运行一个完整的Linux发…

Unity粒子系统制作动态闪电链特效:从原理到实战

Unity粒子系统制作动态闪电链特效:从原理到实战

2026/8/5 6:29:47

1. 项目概述:从游戏灵感出发,到Unity特效落地最近在重温《只狼:影逝二度》,每次看到苇名弦一郎或者剑圣苇名一心施展“雷击”时,屏幕中那道撕裂空气、连接天地的金色闪电链,配合着清脆的雷鸣和角色的硬直&a…

MySQL分库分表实战:从架构设计到数据迁移的完整指南

MySQL分库分表实战:从架构设计到数据迁移的完整指南

2026/8/5 6:29:47

1. 项目概述:为什么我们需要分库分表? 做后端开发或者数据库运维的朋友,应该都经历过数据库性能瓶颈带来的深夜告警。当你的应用用户量从几百几千,增长到几十万、上百万,甚至更多时,单台MySQL服务器会变得越…

【故障识别】基于CNN-SVM卷积神经网络结合支持向量机的数据分类预测研究(Matlab代码实现)

【故障识别】基于CNN-SVM卷积神经网络结合支持向量机的数据分类预测研究(Matlab代码实现)

2026/8/5 6:29:47

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…

从零搭建基于OpenClaw的AI智能办公助手:部署、技能集成与自动化实战

从零搭建基于OpenClaw的AI智能办公助手:部署、技能集成与自动化实战

2026/8/5 6:19:47

1. 项目概述:为什么需要一个24小时在线的智能办公助手? 最近在折腾一个项目,需要频繁地在不同文档、代码仓库和即时通讯工具之间来回切换,处理一些重复性的信息查询、数据整理和状态同步任务。这种“人肉API”的工作方式不仅效率…

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

2026/8/4 15:23:37

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲&am…

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

2026/8/5 6:02:27

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比工程导读:本文深入讨论 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 在生产工程实践中的核心落地方案。基于 分布式架构与微服务设计 视角,剖析实际痛点、架…

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

2026/8/3 20:38:37

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,…

Go + 云原生微服务架构实战:2026 企业级开发完整指南

Go + 云原生微服务架构实战:2026 企业级开发完整指南

2026/8/5 0:09:22

Go 云原生微服务架构实战:2026 企业级开发完整指南 CNCF 最新数据显示,2026 年云原生相关岗位增速同比上涨 62%。Kubernetes、Docker、Etcd、Prometheus 等云原生基础设施全部由 Go 语言编写。Go 语言凭借简洁的语法、出色的并发模型、极快的编译速度和…

LangChain项目上线就翻车?团队接手的拦路虎从来不是代码

LangChain项目上线就翻车?团队接手的拦路虎从来不是代码

2026/8/5 0:09:22

聊《一个LangChain项目上线后,最先暴露的并不是代码问题》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。 摘要 摘要:我见过太多LangChain Demo能跑的项目,一交出去就崩。不是模…

3步轻松实现音乐格式自由:ncmdump网易云NCM解密完整指南

3步轻松实现音乐格式自由:ncmdump网易云NCM解密完整指南

2026/8/5 0:09:22

3步轻松实现音乐格式自由:ncmdump网易云NCM解密完整指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经在网易云音乐下载了心爱的歌曲,却发现只能在特定客户端播放?当你想在车载音响、…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/4 13:34:51

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/4 14:25:14

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/4 15:11:03

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…