计算机视觉技术应用项目化教程 课件 史荧中 项目6-11 图像平滑滤波操作-图像模板匹配_第1页
计算机视觉技术应用项目化教程 课件 史荧中 项目6-11 图像平滑滤波操作-图像模板匹配_第2页
计算机视觉技术应用项目化教程 课件 史荧中 项目6-11 图像平滑滤波操作-图像模板匹配_第3页
计算机视觉技术应用项目化教程 课件 史荧中 项目6-11 图像平滑滤波操作-图像模板匹配_第4页
计算机视觉技术应用项目化教程 课件 史荧中 项目6-11 图像平滑滤波操作-图像模板匹配_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目六:图像平滑滤波操作让模糊的图像重获新生COMPUTERVISION·计算机视觉系列课程任务导入:老照片的数字化修复📸修复前:岁月斑驳画面布满噪点,细节模糊不清✨修复后:细节清晰噪点去除,质感大幅提升📜场景描述很多珍贵的老照片记录着不可复制的回忆,但在采集、冲洗或长期存储过程中,往往会留下明显的噪点和划痕,岁月斑驳让图像质量严重受损。❓核心问题噪声会干扰图像细节的表达。如何在有效去除噪声干扰的同时,最大程度地保留并还原图像原有的纹理与细节,是数字图像处理领域最基础也最关键的问题之一。🎯学习目标掌握“图像平滑滤波”技术体系,学会针对不同噪声类型选择合适的去噪算法,亲手实现图像磨皮与去噪,让模糊的旧影像重获新生。本项目学习目标知识目标KNOWLEDGE•理解图像噪声的基本概念及其主要类型(如高斯噪声、椒盐噪声)。•掌握图像平滑滤波的基本原理,即通过邻域像素值的计算来抑制噪声。•理解均值、高斯、中值、方框及双边滤波的核心算法思想及区别。•了解卷积核(Kernel)在滤波操作中的关键作用。能力目标SKILLS•熟练使用OpenCV函数(cv2.blur,GaussianBlur,medianBlur等)对图像进行平滑处理。•能够根据不同的噪声类型(如高斯/椒盐)分析并选择最合适的滤波方法。•掌握使用cv2.filter2D()函数自定义卷积核,实现特定的图像滤波效果。素质目标QUALITY•培养分析与解决问题的能力,针对具体的图像质量问题制定并选择最优的技术方案。•提升代码调试和算法优化能力,在实践中深化对理论的理解。•建立严谨求实的科学态度和精益求精的工匠精神。知识准备:图像噪声什么是图像噪声?图像噪声是指图像中存在的不必要的、干扰视觉信息的像素值随机变化。它通常源于图像的获取(如传感器热噪声)或传输过程,会降低图像质量,干扰后续的分析与处理。高斯噪声(GaussianNoise)源于电子电路噪声、低光照或高温环境下的传感器噪声。其像素值的概率密度函数服从正态分布,在视觉上表现为在图像上叠加了一层细密的、均匀的“雪花”状颗粒,降低了图像的对比度和清晰度。💡特点:分布连续、像“磨砂玻璃”或“雪花”椒盐噪声(Salt&Pepper)又称脉冲噪声,通常由传感器故障、传输信道错误或模数转换中的错误导致。表现为图像中随机、稀疏分布的白色亮斑(盐噪声)和黑色暗斑(椒噪声),视觉上非常突兀,严重破坏局部像素信息。💡特点:分布离散、随机的黑白“斑点”知识准备:滤波与卷积滤波Filtering是一种信号处理操作,旨在去除信号中某些特定频率的成分。在图像处理中,它通常指对图像应用一个“滤波器”或“核”(Kernel)来修改图像的像素值。卷积Convolution是实现滤波的一种数学方法。对于图像中的每一个像素,我们将一个较小的矩阵(卷积核)与其周围的邻域像素进行卷积运算(对应位置相乘再求和),得到的结果作为该像素的新值。邻域操作Operation图像平滑滤波本质上是一种邻域操作。对于图像中的每一个像素,其新值是由其邻域内像素值的集合通过某种函数计算得到的。不同的滤波方法,其核心区别就在于这个函数的定义不同。任务6.1:利用均值滤波去除颗粒噪声滤波原理均值滤波(MeanFiltering)是最简单的平滑滤波方法。它通过一个滤波核覆盖图像中的每个像素,计算核内所有像素灰度值的平均值,并用该值替换中心像素,以此达到平滑效果。主要特点✔优点:算法逻辑简单直观,计算速度极快,容易实现。✘缺点:对图像边缘信息同样进行平均,导致边缘细节丢失和模糊;对椒盐噪声的去除效果较差。适用场景:去除图像中比较均匀分布的颗粒噪声。OpenCV核心函数cv2.blur(src,ksize)均值滤波代码实现importcv2importnumpyasnp#定义滚动条回调函数,实时调整核大小并应用滤波defdoBlur(value):kernel_size=cv2.getTrackbarPos('KernelSize','MeanFilterDemo')*2+1resImg=cv2.blur(srcImg,(kernel_size,kernel_size))#核心函数cv2.putText(resImg,f"KernelSize:{kernel_size}x{kernel_size}",(10,30),cv2.FONT_HERSHEY_SIMPLEX,1.0,(0,0,255),2)cv2.imshow('MeanFilterDemo',resImg)#主程序入口srcImg=cv2.imread("img/lenanoise.jpg");dWindow('MeanFilterDemo')cv2.createTrackbar('KernelSize','MeanFilterDemo',0,20,doBlur)cv2.waitKey(0);cv2.destroyAllWindows()任务6.2:利用高斯滤波去除高斯噪声核心原理高斯滤波(GaussianFiltering)是一种线性平滑滤波,其核心思想是对邻域像素进行加权平均,权重由高斯函数决定。离中心像素越近的像素,权重越大,从而让结果更平滑。主要特点✅优点:对高斯噪声抑制效果极佳,相比于均值滤波,能更好地保留图像边缘细节,不易产生边缘模糊。⚠️缺点:计算量略高于均值滤波,需计算权重系数。OpenCV核心函数cv2.GaussianBlur(src,ksize,sigmaX)适用于去除高斯噪声的首选平滑方法高斯滤波代码实现#导入库并定义回调函数,通过滑动条实时调整参数importcv2importnumpyasnpdefdoGaussianBlur(value):k=cv2.getTrackbarPos('KernelSize','Demo')*2+1sigma=cv2.getTrackbarPos('Sigma','Demo')/10.0img=cv2.GaussianBlur(src,(k,k),sigmaX=sigma)#核心函数if__name__=='__main__':src=cv2.imread('noisy_image.jpg');dWindow('Demo')cv2.createTrackbar('Kernel','Demo',0,20,doGaussianBlur)cv2.createTrackbar('Sigma','Demo',1,50,doGaussianBlur)cv2.waitKey(0);cv2.destroyAllWindows()任务6.3:基于方框滤波进行归一化处理算法原理方框滤波(BoxFiltering)是一种通用的线性滤波方法,其核心逻辑是计算核区域内所有像素值的总和。它提供了一个关键开关,让开发者能自由选择是否对结果进行“归一化”处理。关键参数:normalize•True(默认):结果=邻域像素和÷核面积,等同于“均值滤波”。•False:结果=邻域像素和。直接求和会导致像素值易溢出255,产生高亮“亮斑”。适用场景当需要对图像进行简单的邻域求和运算而非求平均时使用;或作为均值滤波的另一种更底层、更灵活的实现方式,以满足特定的图像处理逻辑需求。OpenCV核心函数cv2.boxFilter(src,ddepth,ksize,normalize)注:ddepth通常设为-1,代表输出图像与原图深度一致任务6.4:利用中值滤波去除椒盐噪声核心原理·MedianFiltering一种非线性滤波技术,将核内所有像素的灰度值排序后,取中间值作为中心像素的新值,以此替代原像素。显著优点•去除椒盐噪声的首选方案,孤立噪点会被排除在中值之外。

•相比均值滤波,更好地保护图像边缘不模糊。主要局限•计算复杂度高于均值滤波,因涉及排序操作。

•对高斯噪声等分布均匀的噪声效果不佳。📝适用场景&核心代码场景:处理受椒盐噪声/脉冲噪声污染的图像

OpenCV函数:cv2.medianBlur(src,ksize)(ksize必须为奇数)图像中值滤波效果对比:原图vs滤波后(去噪保边)任务6.5:利用双边滤波进行保边去噪核心原理双边滤波是一种非线性滤波算法,它在计算像素新值时,同时结合了空间域和像素值域的相似度作为权重。•空间高斯权重:确保只考虑中心像素附近的像素点,体现“空间邻近性”。•值域高斯权重:确保只考虑与中心像素颜色值相近的像素点,体现“像素相似性”。特点分析👍主要优点能在有效去除图像噪声的同时,最大程度保留图像的边缘细节,避免了传统高斯滤波造成的边缘模糊。👎主要缺点由于需要同时计算两个维度的高斯权重,且不具备可分离性,计算成本远高于高斯滤波,处理速度较慢。典型应用场景•人像美颜与皮肤磨皮

•医学图像的边缘保持去噪

•保留纹理的通用图像降噪处理OpenCV核心函数cv2.bilateralFilter(src,d,sigmaColor,sigmaSpace)参数:d(邻域直径),sigmaColor(颜色标准差),sigmaSpace(空间标准差)任务6.6:自定义卷积核实现滤波原理剖析什么是自定义卷积?OpenCV提供的通用滤波函数cv2.filter2D()打破了内置滤波器的限制,允许开发者自定义任意维度的卷积核(Kernel)进行卷积运算。这种方式赋予了我们极大的灵活性,可以自由设计算法来实现锐化、模糊、浮雕、边缘检测等各种定制化的视觉效果。核心函数cv2.filter2D(src,ddepth,kernel)参数解析:•src:输入图像(原图)。•ddepth:输出图像深度,-1代表与原图一致。•kernel:Numpy数组形式的卷积核矩阵。代码实战:图像锐化#1.定义锐化卷积核

kernel=np.array([

[0,-1,0],

[-1,5,-1],

[0,-1,0]

])#2.应用卷积操作

img=cv2.imread("lenna.jpg")

sharp=cv2.filter2D(img,-1,kernel)项目总结:滤波方法对比均值滤波🔍核心原理:

对目标像素的邻域像素值直接取算术平均值。✅显著优点:

算法逻辑极其简单,计算速度快,易于实现。⚠️主要缺点:

对图像边缘信息破坏严重,会导致画面整体模糊。🎯适用场景:

主要用于去除图像中的均匀分布颗粒噪声。高斯滤波🔍核心原理:

根据像素距离进行加权平均,距离越近权重越高。✅显著优点:

平滑自然,在有效降噪的同时能较好地保留边缘。⚠️主要缺点:

相比均值滤波,其权重计算过程较为复杂,计算量大。🎯适用场景:

专门用于处理图像中的高斯噪声(正态分布噪声)。方框滤波🔍核心原理:

对邻域像素值直接求和,可选择是否进行归一化处理。✅显著优点:

高度灵活,通过参数设置即可实现均值滤波或求和滤波。⚠️主要缺点:

当开启归一化时,缺点与均值滤波相同,易模糊边缘。🎯适用场景:

适用范围较广,常用于需要灵活控制求和或平均的场景。中值滤波🔍核心原理:

将邻域内所有像素排序后取中间值作为当前像素值。✅显著优点:

去除椒盐噪声效果极佳,且能很好地保护图像边缘细节。⚠️主要缺点:

由于包含排序运算,处理速度较慢,可能破坏纹理细节。🎯适用场景:

处理图像中的椒盐噪声(黑白噪点)的首选方案。双边滤波🔍核心原理:

结合“空间邻近度”与“像素值相似度”进行加权滤波。✅显著优点:

目前保边去噪效果最好的滤波方法之一,视觉效果自然。⚠️主要缺点:

算法复杂度高,计算成本非常昂贵,处理耗时。🎯适用场景:

适用于对去噪和边缘保留都有高要求的场景。习题与思考01/选择题Q1.对于去除图像中的椒盐噪声,最有效的滤波方法是?

A.均值滤波B.高斯滤波

C.中值滤波D.双边滤波Q2.以下哪种滤波方法在去噪同时,最能保持图像边缘清晰度?

A.均值滤波B.高斯滤波

C.中值滤波D.双边滤波02/简答题Q1.简述均值滤波和高斯滤波的主要区别。

提示:可从卷积核权重分布、对图像模糊程度的影响等角度分析。Q2.为什么中值滤波能够有效去除椒盐噪声?

提示:结合中值滤波的原理与椒盐噪声的特点思考。03/实践题尝试使用OpenCV中的函数进行图像卷积操作:任务目标:

创建一个边缘检测卷积核(如Sobel算子或Laplacian算子),并使用cv2.filter2D()将其应用在一张灰度图上,观察处理后的边缘效果。💡提示

注意数据类型转换,避免溢出导致结果异常。Q&A感谢观看THANKYOUFORWATCHINGPROJECT07图像频域滤波操作进入图像的“频率世界”COMPUTERVISION·计算机视觉系列课程任务导入:如何去除恼人的周期性噪声?图:含有周期性条纹噪声的扫描文档或老照片📝案例描述处理珍贵的历史照片或扫描文档时,发现图像上覆盖着一种规律性的、重复出现的条纹或网格状噪声,严重影响阅读和美观。⚡️面临挑战常规的空间域滤波方法(如均值滤波)虽然能减弱噪声,但会模糊图像的细节和边缘,无法兼顾“去噪”与“保细节”两个目标。💡答案揭晓:频域分析周期性噪声在频域中对应特定的“亮点”。将图像转换至频域,精准定位并屏蔽这些噪声频率,再逆变换回空间域,即可实现去噪与细节保留兼得!本项目学习目标知识目标Knowledge•理解核心原理:掌握二维离散傅里叶变换(2D-DFT)的基本概念,理解空间域到频域的转换逻辑。•掌握频域概念:理解频域图像的频谱、相位谱含义,以及高低频分量在图像中的分布规律。•熟悉滤波原理:理解频域滤波思想,即通过与滤波器函数相乘,实现对特定频率成分的增强或抑制。•了解滤波器类型:掌握理想低通(ILPF)和理想高通(IHPF)滤波器的原理及其对图像的具体影响。能力目标Skills•基础操作能力:熟练使用OpenCV与NumPy库,独立完成图像的二维离散傅里叶变换及逆变换的完整代码实现。•结果处理能力:能编写代码对变换结果进行中心化处理,并正确计算和可视化显示幅度谱,验证变换效果。•算法应用能力:设计并实现简单的频域滤波器,观察并分析滤波前后图像的直观变化及背后的原因。素质目标Competence•培养多维科学思维:

突破传统空间域视角,建立“空间域-频域”相互映射与转换的分析框架,学会从不同维度拆解和解决图像处理问题。•提升算法评估能力:

在对比不同滤波器效果的过程中,培养客观分析算法优缺点、适用性及权衡利弊的工程评估能力。什么是傅里叶变换?核心定义傅里叶变换是一种将信号从时域(空间域)转换到频域的数学工具。它揭示了一个深刻的本质:任何复杂的信号,都可以看作是许多不同频率、振幅和相位的简单正弦波的叠加。二维离散傅里叶变换(2D-DFT)针对图像这类二维信号,它将像素矩阵f(x,y)转换为复数矩阵F(u,v)。其中,(x,y)代表像素的空间坐标,(u,v)代表频率坐标,F(u,v)即为包含幅度与相位信息的傅里叶频谱。频谱中心化(FFTShift)DFT原始结果中,能量集中的低频分量分布在四个角落。在Python中,我们通常使用np.fft.fftshift()将低频移至图像中心,以方便观察与处理。📊频谱解读•中心亮点:代表图像中的低频分量,对应图像中大片的平坦、平滑区域。

•四周暗点:代表图像中的高频分量,对应物体的边缘、纹理以及图像中的细节和噪声。频谱、幅度谱与相位谱傅里叶变换的结果F(u,v)是一个复数,包含了实部与虚部,可以表示为:F(u,v)=R(u,v)+j·I(u,v)幅度谱(MagnitudeSpectrum)|F(u,v)|=√(R²+I²)•代表图像中每个频率分量的强度,越亮代表该频率成分越显著。

•通常中心最亮,因为图像大部分能量集中在低频区域。相位谱(PhaseSpectrum)φ(u,v)=arctan2(I(u,v),R(u,v))•描述了每个频率分量的相位信息。

•主要决定了图像中物体的几何位置、边缘和整体结构。💡关键提示:在大多数图像处理与简单滤波应用中,我们主要关注幅度谱来分析和修改图像频率。频域滤波原理01正变换·ForwardTransform将原始空间域图像f(x,y)通过离散傅里叶变换(DFT)转换到频域,得到包含图像频率信息的频谱F(u,v)。02滤波·Filtering将频域频谱F(u,v)与设计好的频域滤波器H(u,v)进行逐元素相乘,以增强或抑制特定的频率成分,得到G(u,v)。03逆变换·InverseTransform将处理后的频域图像G(u,v)通过逆离散傅里叶变换(IDFT)转换回空间域,最终得到处理后的图像g(x,y)。核心思想·CoreConcept在频域中对图像不同频率的成分进行“筛选”:保留感兴趣的频率成分,滤除干扰频率。处理后再转换回空间域,从而实现去噪、增强边缘或平滑图像等特定效果。任务7.1:利用DFT获得图像频域信息任务目标对一张灰度图像执行二维离散傅里叶变换,将变换后的频谱进行中心化处理,并计算、展示最终的幅度谱,直观理解图像的频域特性。关键函数解析●cv2.dft():对图像矩阵执行二维离散傅里叶变换(DFT),将图像从空间域映射到频域。

●np.fft.fftshift():将变换后的高频与低频成分互换,把低频部分移至频谱图的几何中心,便于观察。

●cv2.magnitude():计算复数的幅值,将DFT产生的实部和虚部转化为可视的能量幅度谱。Python代码实现importcv2,numpyasnp,matplotlib.pyplotasplt

#1.读取灰度图像并转为浮点型

img=cv2.imread('img/lena.jpg',0);dft=cv2.dft(np.float32(img),flags=cv2.DFT_COMPLEX_OUTPUT)

#2.频谱中心化与幅度谱计算

dft_shift=np.fft.fftshift(dft)#中心化

magnitude=20*np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))#对数缩放以增强对比度

#3.并排展示原图与幅度谱

plt.subplot(121),plt.imshow(img,cmap='gray'),plt.title('原图')

plt.subplot(122),plt.imshow(magnitude,cmap='gray'),plt.title('幅度谱(DFT)');plt.show()任务7.2:利用滤波器平滑图像和提取边缘理想低通滤波器(ILPF)🔵核心作用:允许低频分量通过,抑制高频分量。🖼️视觉效果:在空间域表现为图像平滑,去除尖锐细节,实现模糊效果。理想高通滤波器(IHPF)🔴核心作用:允许高频分量通过,抑制低频分量,突出灰度突变。⚡视觉效果:在空间域表现为提取图像边缘和轮廓,生成类似“线稿”的图像。频域滤波实现三步法Step1.设计掩码创建与频谱尺寸相同的二值掩膜,中心为1(低通)或0(高通)。Step2.频域相乘将图像频谱与滤波器掩码进行对应位置的元素相乘。Step3.逆变换回显对滤波后的频谱进行逆傅里叶变换,还原为空间域图像。频域滤波代码实现importcv2importnumpyasnpimportmatplotlib.pyplotasplt#1.读取灰度图像并确定中心坐标img=cv2.imread('img/lena.jpg',0)#0表示以灰度模式读取rows,cols=img.shape;crow,ccol=rows//2,cols//2#2.执行离散傅里叶变换(DFT)并将低频分量移至中心dft=cv2.dft(np.float32(img),flags=cv2.DFT_COMPLEX_OUTPUT)dft_shift=np.fft.fftshift(dft)#3.构造低通(LPF)与高通(HPF)滤波器掩码(半径30)mask_lp=np.zeros((rows,cols,2),np.uint8)cv2.circle(mask_lp,(ccol,crow),30,(1,1),-1)mask_hp=np.ones((rows,cols,2),np.uint8)cv2.circle(mask_hp,(ccol,crow),30,(0,0),-1)#4.应用滤波器并进行逆变换得到空域图像f_ishift_lp=np.fft.ifftshift(dft_shift*mask_lp)#乘以掩码,保留低频img_lp=cv2.magnitude(*cv2.idft(f_ishift_lp).T)#计算幅值还原图像#5.显示结果(原始,低通滤波结果,高通滤波结果)plt.subplot(131),plt.imshow(img,'gray'),plt.title('Original')plt.subplot(132),plt.imshow(img_lp,'gray'),plt.title('LowPass')plt.show()项目小结:频域滤波技术核心概念•频域分析:将图像从空间域转换到频率域,从全新的视角分析图像信息。•二维离散傅里叶变换(DFT):连接空间域与频域的核心数学工具。•频谱中心化:频域处理的关键前置步骤,将能量集中的低频分量移至中心,便于观察和操作。•频域滤波原理:将变换后的图像频谱与设计好的滤波器传递函数直接相乘。核心应用场景🟢低通滤波器(LPF)保留图像中的低频分量,滤除高频分量。通常用于消除图像中的颗粒噪声或实现图像平滑、模糊化效果。🔴高通滤波器(HPF)保留图像中的高频分量,抑制低频。常用于图像的边缘提取、锐化处理,增强细节对比度。核心技术优势虽然频域滤波通常计算量较大,但在特定场景下拥有空间域滤波无法比拟的优势:🎯针对性强:对于具有周期性规律的噪声(如条纹、摩尔纹等),频域滤波能通过精准的陷波滤波器直接去除,效果显著优于空间域滤波。🔍全局视野:提供了对图像频率成分的全局视角,便于分析图像的整体能量分布与特征,从而指导滤波器的设计。习题与思考01思考题为什么在显示幅度谱时需要进行对数变换?如果不进行对数变换,会看到什么现象?02编程题修改任务7.2的代码,尝试使用不同半径r的低通和高通滤波器,观察并记录图像效果的变化。03探索题理想滤波器在空间域会产生振铃效应。请查阅资料了解高斯低通滤波器(GLPF),尝试用代码实现它并对比效果差异。04挑战题寻找一张带有周期性噪声的图像,尝试在频域定位噪声对应的亮点,设计一个“陷波滤波器”来去除噪声。Q&A感谢观看THANKSFORWATCHING项目八:图像形态学操作对图像进行精细的“雕刻”与“塑造”COMPUTERVISION·计算机视觉系列课程任务导入:工业质检与文档数字化的挑战场景一:工业零件字符识别在生产线上,零件标识字符常因油墨不均、打印头磨损等原因出现残缺、断裂,导致OCR识别失败。如何让这些字符“恢复”完整?场景二:文档扫描与档案数字化扫描件上常出现黑点、墨迹或纸张杂色斑点,干扰阅读和识别。如何有效去除这些“毛刺”和“污点”?这两个场景都指向了同一个核心需求:在不改变图像主体结构的前提下,对图像的形状进行调整和优化。这正是我们今天要学习的——图像形态学操作所要解决的问题。本项目学习目标知识目标Knowledge•理解核心概念:深入理解图像形态学的基本概念,包括结构元素(Kernel)、锚点(Anchor)等基础定义。•掌握基本操作:透彻掌握形态学的基石:膨胀(Dilation)与腐蚀(Erosion)的数学原理与视觉效果差异。•熟悉组合操作:准确区分并理解由基本操作组合而成的开运算、闭运算、形态学梯度、顶帽与黑帽的特性及适用场景。能力目标Skills•工具使用能力:熟练调用OpenCV库中的`cv2.getStructuringElement()`函数,灵活创建不同形状、大小的结构元素。•编程实现能力:独立编写Python代码,正确使用`cv2.dilate()`/`cv2.erode()`函数实现基础形态学变换。•综合应用能力:运用`cv2.morphologyEx()`处理真实的图像处理任务,根据实际需求选择最合适的组合操作。素质目标Competence•培养严谨思维:

在选择结构元素的类型、大小及操作顺序时,养成科学、严谨的逻辑分析习惯,避免盲目尝试。•提升解决问题能力:

面对复杂的图像预处理或特征提取问题,学会将问题拆解为多个简单步骤,灵活组合不同的形态学操作来攻克难题。知识准备:结构元素什么是结构元素?结构元素(StructuringElement,SE)是一个小的、通常是正方形或圆形的二进制矩阵(由0和1组成)。它就像一个“模板”,在图像上进行滑动,根据结构元素与覆盖区域的像素关系,来决定输出图像对应像素的值。锚点(AnchorPoint)它是结构元素中的一个参考点,通常被设定为结构元素的几何中心。在进行腐蚀、膨胀等形态学操作时,锚点会对准当前正在处理的图像像素,以此为基准判断周围像素的取值。OpenCV创建方式#矩形(MORPH_RECT)

rect=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))#十字形(MORPH_CROSS)

cross=cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))#椭圆形(MORPH_ELLIPSE)

ellipse=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))基本形态学操作:腐蚀与膨胀腐蚀(Erosion)💡原理:结构元素的锚点在图像上滑动。只有当结构元素覆盖的所有像素都为前景(白色)时,锚点对应的输出像素才为前景;否则为背景(黑色)。🎯效果:图像中的前景区域会“收缩”或“被侵蚀”,能够有效去除小的白色噪声点,并分离邻近的物体。膨胀(Dilation)💡原理:结构元素的锚点在图像上滑动。只要结构元素覆盖的区域中有任意一个像素为前景(白色),锚点对应的输出像素即为前景。🎯效果:图像中的前景区域会“扩张”或“膨胀”,能有效填补前景物体中的小空洞,并连接断裂的线条或物体。任务8.1:利用膨胀操作修复残缺字符任务目标与原理🎯任务描述:在处理扫描文档或低分辨率验证码时,经常会遇到字符断裂、笔画残缺的情况。本任务要求对这类二值图像进行处理,通过膨胀操作填补断裂的笔画,使字符恢复完整,便于后续识别。⚙️核心原理:膨胀是形态学基本操作之一,它是将与物体接触的所有背景点合并到物体中的过程,从而扩大前景像素区域。通过设定合适的结构元素尺寸和迭代次数,我们可以有效地连接断裂部分。Python代码实现importcv2;importnumpyasnp#1.读取灰度图像img=cv2.imread('broken_text.png',0)#2.创建5x5矩形结构元素kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))#3.执行两次膨胀操作以增强效果dilated=cv2.dilate(img,kernel,iterations=2)cv2.imshow('RepairedText',dilated);cv2.waitKey(0)任务8.2:利用腐蚀操作去除内部毛刺▍任务描述给定一张带有内部噪声(白色小点)的二值图像,我们需要利用形态学中的腐蚀操作,通过选择一个比噪声点稍大的结构元素(Kernel),将这些分散的白色小噪声点“侵蚀”去除,同时保留主体轮廓。▍代码实现(Python+OpenCV)importcv2importnumpyasnp#1.读取二值化后的噪声图像img=cv2.imread('noisy_image.png',0)#0表示以灰度模式读取#2.创建3x3的矩形结构元素,足够覆盖噪声点kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))#3.执行腐蚀操作,核心函数eroded_img=cv2.erode(img,kernel)#4.对比显示原图与处理后的结果cv2.imshow('Original(Noisy)',img);cv2.imshow('Eroded(Clean)',eroded_img)cv2.waitKey(0);cv2.destroyAllWindows()任务8.3:使用开运算去除边缘毛刺核心原理:先腐蚀,后膨胀开运算能有效去除图像边缘的微小噪声点,同时能较好地保持主体物体的几何大小与原始形状基本不变,常用于处理指纹、条码识别等场景。#1.导入库并读取灰度图像

importcv2,numpyasnp

img=cv2.imread('edge_noise.png',0)#2.创建5x5的矩形结构元素与执行开运算

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

opening=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)#3.显示对比结果

cv2.imshow('OriginalvsResult',np.hstack((img,opening)))📊效果对比:左侧原图(含边缘毛刺)vs右侧开运算结果任务8.4:使用闭运算填补内部空洞核心原理|ClosingPrinciple闭运算(Closing)是先执行膨胀运算,再执行腐蚀运算的组合操作。该方法对于填充前景物体内部的细小黑洞、连接邻近物体以及平滑物体边界的同时保持其面积大小基本不变非常有效。💻代码实现(Python+OpenCV)importcv2importnumpyasnp#1.读取灰度图像img=cv2.imread('hollow_object.png',0)#2.创建7x7的矩形结构元素kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(7,7))#3.执行闭运算closing_img=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)#4.展示原始图与处理结果对比cv2.imshow('Original',img)cv2.imshow('AfterClosing',closing_img)cv2.waitKey(0)cv2.destroyAllWindows()📊运算效果对比左图:存在内部空洞的原始二值图像

右图:经闭运算处理后,空洞被有效填充任务8.5:使用形态学梯度运算获取对象边缘核心原理形态学梯度(MorphologicalGradient)形态学梯度是对图像进行膨胀(Dilation)操作后的图像,与进行腐蚀(Erosion)操作后的图像,逐像素相减的结果。由于膨胀操作会扩大物体边界,而腐蚀操作会缩小物体边界,两者的差值正好能提取出物体的轮廓边缘,是一种非常直观高效的边缘提取方法。代码实现(Python+OpenCV)#1.导入库并读取灰度图像

importcv2;importnumpyasnp

img=cv2.imread('object.png',0)#2.定义3x3矩形结构元素并计算梯度

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

grad=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)#3.显示原图与边缘结果对比

cv2.imshow('Original',img);cv2.imshow('Gradient',grad)

cv2.waitKey(0);cv2.destroyAllWindows()任务8.6&8.7:顶帽与黑帽运算顶帽运算(TopHat)💡核心原理计算公式:

顶帽=原始图像-开运算结果🎯主要作用分离比邻近区域更亮的斑块,常用于在复杂背景中提取微小的亮物体,如:提取图像中较亮的文字、星空中的亮星。黑帽运算(BlackHat)💡核心原理计算公式:

黑帽=闭运算结果-原始图像🎯主要作用分离比邻近区域更暗的斑块,常用于提取前景物体上的微小暗洞、划痕,或增强暗背景下的暗物体细节。代码实现(Python)#1.顶帽运算(TopHat)

tophat_img=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)#2.黑帽运算(BlackHat)

blackhat_img=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)项目小结:形态学操作对比腐蚀(Erosion)原理:收缩前景像素,缩小物体边界效果:去除小亮噪声,分离连接物体适用:去除物体内部细小毛刺膨胀(Dilation)原理:扩张前景像素,扩大物体边界效果:填充微小空洞,连接断裂部分适用:修复残缺字符或断裂的边缘开运算(Opening)原理:先腐蚀,后膨胀效果:去除边缘亮噪声,保持形状不变适用:去除物体边缘的微小亮毛刺闭运算(Closing)原理:先膨胀,后腐蚀效果:填充内部暗空洞,保持形状不变适用:填补物体内部的微小暗空洞形态学梯度(MorphologicalGradient)原理:膨胀后的图像减去腐蚀后的图像。效果:提取物体的边缘轮廓,保留边界信息。适用场景:边缘检测、提取物体轮廓顶帽(TopHat)原理:原始图像减去开运算后的图像。效果:分离比邻近背景亮的微小物体或区域。适用场景:提取图像中的微小亮斑黑帽(BlackHat)原理:闭运算后的图像减去原始图像。效果:分离比邻近前景暗的微小空洞或区域。适用场景:提取图像中的微小暗斑或空洞习题与思考01/选择题Q1:哪种操作可有效去除附着在物体边缘的微小亮噪声点,且保持物体形状?

A.腐蚀B.膨胀C.开运算D.闭运算Q2:为了提取图像中物体的轮廓,最佳的形态学操作是?

A.顶帽运算B.黑帽运算C.形态学梯度D.闭运算02/简答题Q1:简述腐蚀(Erosion)和膨胀(Dilation)操作的数学原理,并说明它们各自在图像处理中的核心作用。Q2:开运算和闭运算分别适用于解决什么类型的问题?请从运算顺序、处理对象和产生效果三个维度,对比说明两者的本质区别。03/实践题场景还原:

假设你正在处理一张扫描版的纸质文档图片,背景为白色,但由于扫描设备或纸张老化,文档内容周围存在大量不规则的黑色小斑点(噪声),且文档文字边缘完整清晰。任务:

1.你会优先选择哪一种形态学操作来去除这些黑色斑点?

2.请详细阐述选择该操作的理由,并分析如果使用其他操作可能带来的负面影响。Q&A感谢观看欢迎提出您的疑问·期待与您共同探讨项目九:图像分割从像素到对象的精确划分COMPUTERVISION·计算机视觉系列课程任务导入:自动驾驶中的视觉挑战场景引入想象一下,一辆自动驾驶汽车正在城市道路上行驶。它的“眼睛”——摄像头,捕捉到了前方复杂的画面:道路、车辆、行人、交通标志……这张看似简单的照片,对计算机而言却像是一个需要破解的“密码”。核心问题:计算机如何识别?•哪里是可安全行驶的车道?

•哪里是需要避让的前方车辆?

•哪里是需要减速礼让的行人?答案:图像分割(ImageSegmentation)——计算机视觉中的关键技术,它将图像分解为互不交叠、具有特定语义的区域或对象,是让AI在像素级理解图像内容的第一步。本项目学习目标知识目标|Knowledge●理解图像分割的基本概念

掌握定义、目的及在计算机视觉中的重要性。●掌握常用分割算法原理

理解基于卷积的点/线/边缘检测、霍夫变换、阈值处理与分水岭算法原理。●熟悉相关OpenCV函数

掌握cv2.filter2D,HoughLines,threshold,watershed等核心函数参数与用法。能力目标|Skills●实践操作能力

运用所学算法与OpenCV函数,独立编写代码完成点、线、边缘、圆等的检测任务。●问题分析与解决能力

根据图像特点与需求,灵活选择分割算法,并通过参数调整获得理想效果。素质目标|Competence●培养严谨的逻辑思维

深入理解底层算法逻辑与代码实现逻辑,锻炼分析与拆解复杂问题的思维能力。●提升工程实践素养

通过解决具体项目任务,培养将抽象的计算机视觉理论转化为可落地的工程代码的能力。任务9.1:利用卷积实现点、线和边缘检测核心原理图像中的点、线、边缘是像素值的局部突变。通过设计特定的卷积核(算子),对图像进行卷积运算,可识别并放大这些局部突变,从而实现特征检测。常用算子分类•点检测:突出中心像素与邻域像素的显著差异。

•线检测:检测水平、垂直、对角线等特定方向的线条。

•边缘检测:Sobel(抗噪能力强)、Canny(公认最优的多阶段算法)。OpenCV核心函数:filter2D()|Sobel()|Canny()Canny边缘检测效果演示左图为原始图像,右图为Canny算法提取的边缘轮廓,

可见其对边缘的精准定位与单像素响应特性。Canny边缘检测代码实现📝Canny边缘检测五大步骤1.高斯滤波(GaussianFiltering)对原始图像进行平滑处理,有效去除高频噪声,防止噪声被误判为边缘。2.计算梯度(GradientCalculation)利用Sobel算子计算图像中像素点的梯度强度与方向,捕捉潜在的边缘信息。3.非极大值抑制(Non-MaximumSuppression)沿梯度方向筛选像素,只保留局部最大值,消除非边缘像素,使边缘更细。4.双阈值检测&5.边缘连接设定高低两个阈值,确定真实边缘与潜在边缘,并通过抑制孤立弱边缘完成最终连接。💻Python代码实现importcv2,numpyasnp#1.读取图像并转为灰度图(8-bit)img=cv2.imread('lena.jpg',0)#2.高斯滤波降噪(5x5内核)blurred=cv2.GaussianBlur(img,(5,5),0)#3.Canny核心:低阈值50,高阈值150edges=cv2.Canny(blurred,50,150)#4.显示结果窗口cv2.imshow('Edges',edges);cv2.waitKey(0)任务9.2:利用霍夫变换实现直线和圆检测💡核心原理:霍夫变换是一种将图像空间中的几何形状(直线、圆)检测问题,通过数学映射转换到参数空间中进行“投票”求解的特征提取技术。在参数空间中,积累票数最高的位置对应着图像中最显著的几何形状。📐霍夫直线检测将图像空间中的每一个边缘点,映射为霍夫参数空间中的一条曲线。多条曲线的交点即为直线的参数,对应图像中真实存在的直线。适合检测长而清晰的直线。🔵霍夫圆检测将图像空间中的点映射到三维参数空间(圆心坐标a,b和半径r)中的圆锥面。多个圆锥面的交点即为圆的参数,对应图像中的圆。计算量相对较大,适合检测对比度较高的圆形。OpenCV核心函数调用cv2.HoughLinesP()|cv2.HoughCircles()霍夫直线检测代码实现💻Python实现(OpenCV)importcv2#导入OpenCV库importnumpyasnp#1.读取图像并转为灰度图img=cv2.imread('road.jpg')gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#2.边缘检测(Canny算子)edges=cv2.Canny(gray,50,150,apertureSize=3)#3.概率霍夫直线检测(HoughLinesP)lines=cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength=100,maxLineGap=10)#4&5.绘制直线并显示结果iflinesisnotNone:forlineinlines:x1,y1,x2,y2=line[0];cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)cv2.imshow('HoughLinesResult',img);cv2.waitKey(0);cv2.destroyAllWindows()任务9.3:利用阈值处理进行图像分割核心原理基于图像中物体与背景之间的灰度差异,设定一个或多个阈值,将像素按灰度值分为不同类别,是最简单、最常用的分割手段。全局阈值对整张图像使用同一个阈值进行二值化处理,适合对比度高的简单场景。自适应阈值根据像素周围的局部区域计算阈值,有效解决光照不均图像的分割难题。Otsu二值化通过最小化类内方差,自动计算出全局最优阈值,无需人工手动设置。OpenCV核心函数调用cv2.threshold()|cv2.adaptiveThreshold()图示:不同阈值处理方法的效果对比(从左至右:原图、全局阈值、自适应阈值、Otsu)全局阈值与Otsu二值化对比💻核心代码实现(Python+OpenCV)#1.导入库与读取图像并转为灰度图

importcv2importnumpyasnp

img=cv2.imread('sudoku.jpg',0)#0表示读取为灰度图#2.方法A:固定全局阈值二值化(v=127)

ret1,th1=cv2.threshold(img,127,255,cv2.THRESH_BINARY)#3.方法B:Otsu自动阈值二值化(自动计算最优阈值)

ret2,th2=cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)#4.显示对比结果

foriinrange(3):cv2.imshow(['原图','全局阈值(127)','Otsu阈值'][i],[img,th1,th2][i])任务9.4:使用分水岭算法进行图像分割算法原理将图像视为拓扑地貌,像素灰度值代表海拔高度。水从“最低点”开始淹没,相遇处筑起的“大坝”即为分割边界。面临挑战图像中的微小噪声会被误判为局部极小值,导致算法将图像过度分割为大量细碎的小区域,失去实际意义。改进策略:基于标记的分水岭人工干预标记:明确指定“汇水盆地”(前景物体)和“分水岭”(背景区域),引导算法准确分割。OpenCV核心函数cv2.watershed()基于标记的分水岭算法实现步骤01预处理将图像转为灰度图,然后进行阈值处理得到二值图像,为后续操作打好基础。02寻找背景通过形态学开运算去除微小的亮噪点,从而确定并分离出图像的背景区域。03寻找前景计算距离变换并结合阈值处理,找到每个物体确定的核心区域,即确定前景。04寻找未知区域未知区域=背景区域-确定前景区域。这些区域是分水岭算法将要进行分割的边界。05创建标记图像构建一个与原图尺寸相同的标记图像矩阵。将背景标记为0,为每个确定的前景目标分配一个唯一的正整数ID,用于指导算法分割。06应用分水岭算法调用OpenCV函数:cv2.watershed(img,markers)。算法会从标记的“注水口”开始填充,直到相遇时形成边界。07绘制结果处理返回的标记矩阵:为不同ID的分割区域填充不同的颜色,并将被标记为-1的边界像素以鲜明的颜色(如红色)高亮显示。项目小结:图像分割方法对比卷积特征检测🔍原理:利用卷积核对图像进行滤波,检测像素值突变以提取特征。✨优点:算法基础经典,计算速度快,易于实现。⚠️缺点:仅提取局部特征,无法直接完成完整的区域分割。🎯适用:边缘检测、直线/曲线及角点特征提取。霍夫变换🔍原理:将图像空间的特征映射到参数空间进行累加投票。✨优点:对特征断裂不敏感,能准确检测已知数学模型的几何形状。⚠️缺点:对图像噪声敏感,参数空间计算成本较高。🎯适用:直线、圆、椭圆等规则几何形状的精准检测。阈值处理🔍原理:设定灰度阈值,将图像二值化以区分前景与背景。✨优点:计算逻辑最简单、处理速度极快,效果直观。⚠️缺点:对光照变化非常敏感,阈值选择不当会严重影响结果。🎯适用:目标物体与背景灰度对比度差异较大的简单场景。分水岭算法🔍原理:将图像视为地形表面,通过模拟“淹没”过程实现分割。✨优点:能够一次性分割出相互接触或重叠的多个独立对象。⚠️缺点:容易产生过度分割现象,且算法实现相对复杂。🎯适用:图像中存在大量紧密接触的颗粒、细胞或目标物体。习题与思考01/概念辨析Q1:哪种算子通常用于检测图像垂直边缘?A)[[1,0,-1],[1,0,-1],[1,0,-1]]

B)[[1,1,1],[0,0,0],[-1,-1,-1]]

C)[[-1,-1,-1],[-1,8,-1],[-1,-1,-1]]Q2:光照不均匀时,哪种阈值处理更好?A)全局阈值B)Otsu二值化C)自适应阈值02/深度思考1.边缘检测的算法差异

请简述Sobel算子与Canny算子在实现原理与检测效果上的主要区别。2.阈值方法的适用场景

对比全局阈值、自适应阈值和Otsu二值化三种方法,分别适用于什么类型的图像场景?03/编程实战车道线检测与绘制任务:选取一张包含多条车道线的道路场景图片,编写代码完成以下步骤:

1.预处理:使用灰度化与滤波降低噪声。

2.边缘提取:检测出图像中的车道线边缘。

3.检测与绘制:应用霍夫直线检测算法识别直线,并在原图上绘制出车道线。提示:可结合OpenCV库实现Q&A感谢观看THANKSFORWATCHING项目十:轮廓检测识别物体的边界与形状COMPUTERVISION·计算机视觉系列课程任务导入:智能工厂的零件质检01/案例背景在“智造未来”智能工厂,每天都会生产数以万计的精密机械零件。传统的人工质检方式不仅效率低下,还容易因为视觉疲劳或疏忽出现错检、漏检,无法满足大规模生产的需求。02/面临挑战面对海量的零件,我们需要快速且准确地回答两个核心问题:

1.完整性:零件表面是否存在肉眼难以察觉的微小破损或缺口?

2.精准度:关键部位的尺寸是否完全符合生产图纸的标准?03/引入问题:轮廓检测想要解决上述挑战,我们可以利用计算机视觉中的“轮廓检测”技术。通过算法识别图像中零件的边界,精确计算其形状、面积、周长及尺寸数据,就能实现自动化、高精度、高效率的质量检测!本项目学习目标知识目标Knowledge•理解轮廓概念:掌握轮廓的定义,理解轮廓与边缘的区别与联系。•掌握检索原理:了解OpenCV中轮廓检索模式和逼近方法的含义及适用场景。•熟悉核心函数:掌握`cv2.findContours()`和`cv2.drawContours()`的参数含义与用法。•了解轮廓特征:掌握计算轮廓面积、周长等基本特征的方法。•认识凸包与多边形:理解凸包概念及如何用多边形逼近轮廓。能力目标Skills•图像预处理能力:

能够运用阈值处理、边缘检测等技术,为轮廓检测准备高质量的二值化图像。•轮廓检测与绘制:

能够独立编写Python代码,成功识别图像中的轮廓并进行可视化绘制。•高级轮廓处理:

能够实现查找轮廓凸包,并使用多边形逼近的方法处理复杂轮廓。素质目标Competence•培养严谨的逻辑思维:

通过深入分析不同轮廓检索模式和逼近算法的逻辑差异,锻炼细致、严谨的工程思维能力。•提升代码调试能力:

在代码编写和调试过程中,培养快速发现问题、精准定位原因并有效解决Bug的综合能力。任务10.1:轮廓的查找与绘制什么是轮廓(Contour)?📝定义:由一系列相连的点构成的闭合曲线,代表物体的整体边界与形状。⚖️轮廓vs边缘:•边缘(Edge):像素值突变的孤立点,离散且不连续。•轮廓(Contour):边缘点经过连接与组织后的整体集合。OpenCV核心函数cv2.findContours()在二值图像中检索轮廓坐标cv2.drawContours()将轮廓绘制在目标图像上💡轮廓检测前提轮廓查找函数的输入必须是一张二值图像(BinaryImage)。通常在查找轮廓前,我们会先对原图进行阈值处理(Threshold)或Canny边缘检测,以得到清晰的黑白边界。轮廓查找与绘制代码实现01图像读取与预处理读取图像后,先将彩色图像转换为灰度图,再使用阈值法进行二值化,为轮廓检测做好准备。02查找轮廓调用OpenCV的cv2.findContours()函数,从二值图像中检测出所有物体的轮廓信息,并返回轮廓列表。03绘制轮廓使用cv2.drawContours()函数,将检测到的轮廓在原图或副本上绘制出来,以便直观地观察结果。#1.读取图像并预处理(灰度化与二值化)

src_img=cv2.imread('shapes.png')

gray=cv2.cvtColor(src_img,cv2.COLOR_BGR2GRAY)

_,binary=cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)

#2.查找轮廓(RETR_EXTERNAL:只找最外层)

contours,_=cv2.findContours(binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

print(f"检测到的轮廓数量:{len(contours)}")

#3.在原图上绘制所有轮廓(绿色,线宽2)

cv2.drawContours(src_img,contours,-1,(0,255,0),2)

#显示结果

cv2.imshow('ContourDetection',src_img)

cv2.waitKey(0)任务10.2:凸包的查找与绘制什么是凸包(ConvexHull)?定义:在计算几何中,凸包是能够完全包含给定平面点集所有点的最小凸多边形。它保留了点集的“凸”几何特征,去除了内部细节。💡形象理解:想象用一根紧绷的橡皮筋,从外部完全“包裹”住桌面上随意散落的所有棋子。松开手后,橡皮筋自然收缩形成的多边形轮廓,就是这些棋子的凸包。cv2.convexHull(points[,hull])OpenCV核心函数:查找轮廓的凸包点集▲原始轮廓(红色)与计算出的凸包(绿色)效果对比凸包极大地简化了物体的形状描述凸包查找与绘制代码实现Python+OpenCV核心实现代码#1.读取图像并二值化处理,突出前景轮廓

importcv2;importnumpyasnp

img=cv2.imread('hand.png');res=img.copy()

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

_,binary=cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)#2.检测外部轮廓,并绘制原始轮廓(红色)

contours,_=cv2.findContours(binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

ifcontours:cnt=contours[0];cv2.drawContours(res,[cnt],0,(0,0,255),2)#3.计算并绘制凸包(绿色),形成“包裹”效果

hull=cv2.convexHull(cnt)#核心算法调用,获取凸包点集

cv2.drawContours(res,[hull],0,(0,255,0),3);cv2.imshow("Result:HullvsContour",res)cv2.waitKey(0);cv2.destroyAllWindows()任务10.3:查找与绘制多边形什么是多边形逼近?定义:也称为“轮廓逼近”,是在保证形状特征不变的前提下,使用顶点数量更少的多边形,去近似地表示一个复杂的原始轮廓。应用:在形状匹配、几何特征提取和模式识别中非常实用,能有效降低数据处理的复杂度。cv2.approxPolyDP(curve,epsilon,closed)关键参数epsilon:逼近精度阈值,代表原始轮廓与逼近多边形之间的最大允许距离。值越小,逼近结果越接近原轮廓。多边形逼近代码实现#导入必要库importcv2importnumpyasnp#1.读取图像并二值化预处理src=cv2.imread('star.png');res=src.copy()gray=cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)_,binary=cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)#2.查找轮廓与绘制(绿色)contours,_=cv2.findContours(binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)ifcontours:#确保检测到了轮廓cnt=contours[0];cv2.drawContours(res,[cnt],0,(0,255,0),2)#3.计算周长与执行多边形逼近(红色)peri=cv2.arcLength(cnt,True)#计算轮廓周长(True代表闭合)epsilon=0.01peri;approx=cv2.approxPolyDP(cnt,epsilon,True)cv2.drawContours(res,[approx],0,(0,0,255),2)cv2.imshow('ApproximatedPolygon',res);cv2.waitKey(0);cv2.destroyAllWindows()项目小结:轮廓检测技术核心概念轮廓:物体边界的完整描述,是进行形状分析、物体识别的几何基础。轮廓与边缘:轮廓不是孤立的边缘点,而是连续的、按拓扑结构组织化的边缘整体。核心技能🔍轮廓查找与绘制:

熟练掌握OpenCV中cv2.findContours()与cv2.drawContours()的参数配置与使用。📐关键轮廓分析:

•凸包:使用cv2.convexHull()获取物体的凸包,概括物体整体形状。

•多边形逼近:使用cv2.approxPolyDP()对轮廓进行多边形拟合,实现形状简化与识别。应用价值轮廓检测技术是连接“底层图像处理”与“高层语义理解”的关键桥梁。它是实现物体识别、工业尺寸测量、手势识别、文档扫描与OCR预处理等众多计算机视觉任务不可或缺的基石。习题与拓展01选择题Q1:在OpenCV中,哪个轮廓检索模式只检测最外层的轮廓?

A.cv2.RETR_LIST|B.cv2.RETR_EXTERNAL|C.cv2.RETR_TREEQ2:函数cv2.approxPolyDP()中的参数epsilon表示什么含义?它的值与逼近多边形的关系?

提示:epsilon越小,逼近的多边形越____________原始轮廓。02简答题简述“轮廓”与“边缘”的区别?提示思考方向:

1.定义角度:两者分别在图像处理的什么阶段产生?

2.特征角度:轮廓是边缘吗?它们在连通性上有什么不同?

3.用途角度:它们通常用于解决什么不同类型的问题?03拓展任务综合实战:简单的形状识别任务要求:

1.准备素材:创建一张包含圆形、正方形、三角形的图像(可用画图工具绘制)。

2.代码实现:编写Python+OpenCV程序,自动识别出图片中的所有形状,并在每个形状旁边用文字标注出它的名称(如“Circle”、“Square”)。

💡提示:可通过计算轮廓逼近多边形的边数(顶点数)来判断形状类型。Q&A感谢观看THANKSFORWATCHING欢迎大家随时提出疑问,共同探讨交流PART11项目十一:图像模板匹配在图像中寻找已知的“它”COMPUTERVISION·计算机视觉系列课程任务导入:我们身边的“找相同”01/安防监控在大型商场的监控视频中,如何让计算机自动、快速地找到目标人物?02/工业质检在生产线上,如何让机器视觉系统自动识别出缺少关键部件的不合格产品?03/医学影像分析在复杂的CT扫描图中,如何利用算法辅助医生快速、准确地找到病灶?💡核心问题以上所有场景都有一个共同需求——在一幅大图像中,寻找一个已知的小图像(模板)的位置。

这就是我们今天要学习的核心技术——图像模板匹配。本项目学习目标知识目标Knowledge•理解模板匹配原理:深刻理解图像模板匹配的基本概念和工作原理。•掌握核心函数:掌握OpenCV中cv2.matchTemplate()函数的核心参数及其含义。•了解匹配方法:了解六种不同的模板匹配方法的数学原理和适用场景。能力目标Skills•实现单对象匹配:独立编写代码,使用cv2.matchTemplate()成功实现单对象模板匹配。•实现多对象匹配:基于单对象匹配基础,通过阈值化等方法,实现多对象模板匹配。•分析与选择:根据不同的应用场景,选择合适的匹配方法并分析其结果优劣。素质目标Competence•培养问题解决能力:培养将实际视觉问题抽象为模板匹配问题,并设计算法加以解决的能力。•提升工程实践能力:在项目中提升代码调试、运行结果分析和算法优化的工程实践能力。什么是模板匹配?定义Definition模板匹配是一种在源图像(SourceImage)中寻找与模板图像(TemplateImage)最相似区域的技术。它本质上是一种滑动窗口(SlidingWindow)的匹配方法,广泛应用于目标检测与识别任务中。01准备阶段拥有一张待搜索的源图像I和一张包含目标对象特征的模板图像T。02滑动窗口将模板图像T像窗口一样,在源图像I的全部像素范围内进行滑动遍历。03相似度计算在每一个滑动位置,计算当前模板与对应图像块的相似度或误差。04结果记录将每一步的匹配结果存储在一个二维的结果矩阵R中,矩阵数值代表匹配度。05目标定位分析结果矩阵R,找到相似度最高或差异度最低的值,其位置即为目标在原图中的位置。OpenCV中的核心函数:cv2.matchTemplate()result=cv2.matchTemplate(image,templ,method[,result[,mask]])image:源图像待搜索的输入图像,必须为8位或32位浮点型。templ:模板图像用于搜索的模板,尺寸必须小于或等于源图像。method:匹配方法决定相似度计算方式的核心算法,共六种选择。1.平方差匹配(SQDIFF)原理:计算像素差值的平方和。

特点:数值越小,代表匹配度越高。2.相关性匹配(CCORR)原理:计算模板与图像块的点积。

特点:数值越大,代表匹配度越高。3.相关系数匹配(CCOEFF)原理:衡量两者的相对模式,对光照不敏感。

特点:数值越接近1,代表匹配度越高。💡

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论