版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机视觉应用第3章
图像预处理技术目录CONTENT3.1图像灰度化与二值化013.2图像噪声与去噪023.3图像边缘检测03任务实践04拓展实训05本章小结06课后习题07彩色图计算量大图像预处理是计算机视觉任务的“第一步”,也是关键一步现实中的图像常存在问题:光照不均导致细节模糊噪声干扰目标识别边缘不清晰影响后续检测引言引言其精度直接决定后续算法的可靠性与应用价值,这与职业教育倡导的工匠精神高度契合。"第一工序"图像预处理从"中国鹰眼"VAR技术的国产化突破到美的工厂的AI质检升级,背后都离不开扎实的图像预处理技术支撑。一线技术岗位上,参数的精准调试、噪声的有效去除,看似微小的操作实则关乎产业升级与科技自立。推进新型工业化、发展新质生产力的进程中引言核心预处理技术消除噪声干扰简化图像突出目标提取目标轮廓图像灰度化与二值化图像去噪边缘检测工作情境制造业正往“高质量发展”转型,安防、医疗等领域对图像质量的要求也越来越高工作情境零件图有噪声监控图光照不均图像预处理技术就成了“救场关键”,也是很多视觉岗位必须掌握的核心环节。灰度化、去噪滤波、二值化和边缘检测,就是帮你解决这些问题的:高斯滤波能磨掉零件图的噪声,自适应二值化能让文档图更清晰,Canny边缘检测能勾出监控里的行人轮廓。工作情境不仅能应对岗位里“图像质量差”的实际问题,也能为产业升级中的“精准视觉应用”添一份力。学习目标知识目标3.熟悉关键OpenCV函数的使用方法(如cv2.cvtColor、cv2.threshold、cv2.GaussianBlur、cv2.Canny等)。2.掌握常见图像噪声类型(椒盐噪声、高斯噪声)及其特点。1.理解图像预处理的核心概念与重要性(灰度化、二值化、去噪、边缘检测)。能力目标3.能够通过参数调整(如滤波核大小、阈值、sigma值)优化预处理效果。2.能独立完成“灰度化→去噪→二值化/边缘检测”的完整预处理流程。1.能够根据图像场景选择合适的预处理方法(如自适应二值化处理光照不均、中值滤波去除椒盐噪声)。素养目标3.树立科技自立意识,理解国产技术背后对核心技术的持续打磨与突破。2.增强解决实际问题的工程思维,如通过调试参数应对不同图像场景。1.培养“精益求精、求真务实”的职业精神,理解预处理技术在产业升级中的责任与价值。3.1图像灰度化与二值化图像灰度化3.1.1含3个通道(BGR),像素数据量大,计算复杂;图像灰度化彩色图像灰度化是将彩色图转为单通道灰度图(像素值0-255,0为黑、255为白),既能保留图像核心细节,又能减少50%以上的计算量。灰度化原理灰度值计算遵循“人眼对绿光敏感、对蓝光不敏感”的规律,常用加权平均法:灰度值=0.299×R+0.587×G+0.114×BOpenCV的cv2.cvtColor()函数已内置该算法,无需手动计算。灰度化实现示例3-1:用OpenCV函数实现灰度化(推荐)灰度化实现示例3-1:用OpenCV函数实现灰度化(推荐)运行结果:如图3-1所示,两个窗口对比显示,彩色图色彩丰富,灰度图用明暗程度保留了山脉、天空的细节,无色彩信息。先导入必要的库OpenCV核心库处理数值数组示例3-2:手动实现灰度化(理解原理)第一步:灰度化原理理解灰度化的核心公式:灰度值=0.299×R+0.587×G+0.114×B示例3-2:手动实现灰度化(理解原理)第一步:灰度化原理理解为什么是这个权重?因为人眼对绿光最敏感(权重0.587),红光次之(权重0.299),蓝光最不敏感(权重0.114),这个公式符合人眼视觉特性,不是简单的算术平均。示例3-2:手动实现灰度化(理解原理)第二步:OpenCV函数实现转换标识符示例3-2:手动实现灰度化(理解原理)第二步:OpenCV函数实现转换标识符为什么要先判断ifcolor_imgisNone?是怕图像路径错了读取失败,实际项目里这种容错很重要。示例3-2:手动实现灰度化(理解原理)第三步:手动计算实现转换标识符为什么要转float计算?因为权重计算会产生小数,避免uint8溢出;为什么要用astype(np.uint8)?因为图像像素值必须是0-255的整数。示例3-2:手动实现灰度化(理解原理)第四步:结果验证与对比这行代码验证OpenCV函数与手动计算实现结果是否完全一致,如果输出True,说明我们的原理理解和代码实现都正确。示例3-2:手动实现灰度化(理解原理)第五步:结果显示对比通过并排显示,直观感受两种方法得到的灰度图是否一致,验证实现正确性。示例3-2:手动实现灰度化(理解原理)第六步:资源释放等待按键后关闭所有窗口,释放系统资源通过并排显示,直观感受两种方法得到的灰度图是否一致,验证实现正确性。示例3-2:手动实现灰度化(理解原理)图像二值化3.1.2是在灰度化基础上,将图像转为
“纯黑(0)”和“纯白(255)”
两种像素,彻底简化图像,突出目标(如文本、物体轮廓)。图像二值化二值化核心技术选择“阈值(Threshold)”——灰度值大于阈值设为255,小于等于阈值设为0(或相反)。核心函数:cv2.threshold()语法:ret,dst=cv2.threshold(src,thresh,maxval,type)src:输入图像,必须是单通道灰度图;thresh:自定义阈值(0-255,如127);核心函数:cv2.threshold()语法:ret,dst=cv2.threshold(src,thresh,maxval,type)maxval:阈值类型为“THRESH_BINARY”或“THRESH_BINARY_INV”时,灰度值超过阈值的像素被赋值为maxval,通常为255;核心函数:cv2.threshold()语法:ret,dst=cv2.threshold(src,thresh,maxval,type)type:阈值类型,常用
的有4种,见表3-1;返回值:ret(实际使用的阈值,与输入thresh一致)、dst(二值化后的图像)核心函数:cv2.threshold()类型效果(灰度值>thresh时)应用场景cv2.THRESH_BINARY设为
maxval(255,白),否则0(黑)文本白底黑字→黑底白字cv2.THRESH_BINARY_INV设为
0(黑),否则255(白)文本黑底白字→白底黑字cv2.THRESH_TRUNC设为
thresh,否则保持原灰度值保留暗部细节cv2.THRESH_TOZERO保持原灰度值,否则
0(黑)去除暗部噪声二值化实例:全局阈值示例3-3:文本图像二值化:突出文字二值化实例:全局阈值示例3-3:文本图像二值化:突出文字二值化实例:全局阈值运行结果:如图3-3所示,4个窗口对比显示,阈值100的二值化图文字偏粗,部分背景被误判为文字;阈值150的图文字偏细,部分文字丢失;阈值127的图文字清晰、背景干净,为最优结果。示例3-3:文本图像二值化:突出文字二值化实例:全局阈值等待按键后关闭所有窗口,释放系统资源示例3-4:光照不均图像的自适应阈值二值化如127,适合光照均匀的图像,若图像存在
“一半亮、一半暗”(如窗边的文档),全局阈值会导致亮区文字丢失、暗区背景残留。图像二值化全局阈值自适应阈值根据像素周围的局部亮度自动调整阈值,每个区域用不同阈值。核心函数:cv2.adaptiveThreshold()语法:dst=cv2.adaptiveThreshold(src,maxval,adaptiveMethod,thresholdType,blockSize,C)adaptiveMethod:局部阈值计算方法(ADAPTIVE_THRESH_MEAN_C:局部均值;ADAPTIVE_THRESH_GAUSSIAN_C:局部高斯加权均值);核心函数:cv2.adaptiveThreshold()语法:dst=cv2.adaptiveThreshold(src,maxval,adaptiveMethod,thresholdType,blockSize,C)blockSize:局部区域大小,必须是奇数,如3、5、7,越大越平滑;C:从局部均值/高斯均值中减去的常数,调整阈值偏移,通常为2-10。自适应阈值:解决光照不均示例3-4:光照不均图像的自适应阈值二值化自适应阈值:解决光照不均示例3-4:光照不均图像的自适应阈值二值化第四步:结果对比与验证运行结果:如图3-4所示,全局阈值图中,亮区文字几乎看不见,暗区有大量黑色噪声;自适应阈值图,尤其是高斯法中,亮区和暗区的文字均清晰,背景干净,完美解决光照不均问题。示例3-4:光照不均图像的自适应阈值二值化第五步:资源释放等待按键后关闭所有窗口,释放系统资源示例3-4:光照不均图像的自适应阈值二值化3.2图像噪声与去噪图像噪声与去噪还原信息本质消除干扰误差图像噪声与去噪核心价值求真务实的科学精神精益求精的职业追求图像噪声与去噪"中国鹰眼"图像去噪目标追踪常见噪声类型3.2.1图像中随机出现的
“纯白像素(盐噪声)”和“纯黑像素(椒噪声)”,像撒了盐和胡椒,常见于传感器故障、传输错误;常见噪声类型椒盐噪声高斯噪声噪声像素值服从高斯分布(正态分布),图像整体呈现
“模糊的颗粒感”,常见于低光照、高ISO拍摄。示例3-5:生成椒盐噪声和高斯噪声先导入必要的库OpenCV核心库处理数值数组第一步:噪声原理理解椒盐噪声图像中随机出现的“纯白像素(盐噪声)”和“纯黑像素(椒噪声)”,像撒了盐和胡椒,常见于传感器故障、传输错误;高斯噪声噪声像素值服从高斯分布(正态分布),图像整体呈现“模糊的颗粒感”,常见于低光照、高ISO拍摄。为什么要区分两种噪声?示例3-5:生成椒盐噪声和高斯噪声第二步:椒盐噪声实现(理解原理这里为什么要用noise_ratio/2?因为我们要均分噪声比例,一半给盐噪声(白点),一半给椒噪声(黑点),确保噪声分布均衡。示例3-5:生成椒盐噪声和高斯噪声第三步:高斯噪声实现(理解原理)这里为什么要先归一化?因为高斯噪声需要在0-1范围内计算,避免数值溢出;为什么要用np.clip?因为噪声叠加后可能超出0-1范围,需要裁剪到有效区间。示例3-5:生成椒盐噪声和高斯噪声第四步:噪声效果验证对比显示是为了让大家直观感受两种噪声的视觉差异,理解各自的特点和应用场景。示例3-5:生成椒盐噪声和高斯噪声第五步:资源释放对比显示是为了让大家直观感受两种噪声的视觉差异,理解各自的特点和应用场景。等待按键后关闭所有窗口,释放系统资源示例3-5:生成椒盐噪声和高斯噪声图像去噪:滤波3.2.2去噪的核心是“滤波(Filtering)”用像素周围的“局部区域像素值”替换当前像素值,消除异常噪声。均值滤波(MeanFilter)函数:cv2.blur(src,ksize),ksize为滤波核大小,如(3,3)核。缺点:会模糊图像细节,如边缘,噪声占比越高,模糊越明显;原理:用当前像素周围k×k(k为奇数,如3×3)区域的“均值”替换当前像素值,平滑图像,适合消除高斯噪声;先导入必要的库OpenCV核心库处理数值数组示例3-6:均值滤波去高斯噪声第一步:噪声原理理解均值滤波的核心原理是用当前像素周围k×k区域的像素均值替换当前像素值,通过局部平均来消除随机噪声。为什么要用奇数大小的核?因为奇数核有明确的中心点,便于计算和定位。示例3-6:均值滤波去高斯噪声第二步:噪声生成(准备测试数据)这里为什么要先归一化?因为高斯噪声需要在0-1范围内计算,避免数值溢出;为什么要用np.clip?因为噪声叠加后可能超出有效范围,需要限制在0-255之间。示例3-6:均值滤波去高斯噪声第三步:均值滤波实现(核心)为什么要尝试不同大小的滤波核?因为不同大小的核在去噪强度和细节保留上有明显权衡,需要通过对比找到最佳平衡点。示例3-6:均值滤波去高斯噪声第四步:结果对比与验证示例3-6:均值滤波去高斯噪声示例3-6:均值滤波去高斯噪声第五步:资源释放等待按键后关闭所有窗口,释放系统资源运行结果:如图3-6所示,3×3核去噪后,噪声明显减少,Lena的面部细节,如眼睛、鼻子保留较好;5×5和7×7核去噪更强,但面部轮廓逐渐模糊,证明“核越大,去噪越强但细节损失越多”。高斯滤波(GaussianFilter)函数:cv2.GaussianBlur(src,ksize,sigmaX),sigmaX为X方向高斯标准差,该值越大,去噪越强,Y方向默认与X相同。优势:相比均值滤波,去噪效果更好,且模糊程度更低,是最常用的去噪方法,适合高斯噪声;原理:用当前像素周围k×k区域的“高斯加权均值”替换当前像素值——距离中心越近的像素权重越大,距离越远权重越小;先导入必要的库OpenCV核心库处理数值数组示例3-7:高斯滤波vs均值滤波(去高斯噪声)第一步:高斯滤波原理理解高斯滤波的核心原理是用当前像素周围k×k区域的高斯加权均值替换当前像素值,距离中心越近的像素权重越大,距离越远权重越小。为什么要用高斯加权?因为这种加权方式更符合自然规律,能够在去噪的同时更好地保留边缘和细节信息。示例3-7:高斯滤波vs均值滤波(去高斯噪声)第二步:噪声生成(准备测试数据)这里为什么要先归一化?因为高斯噪声计算需要在0-1范围内进行,确保数值计算的准确性和稳定性。示例3-7:高斯滤波vs均值滤波(去高斯噪声)第三步:高斯滤波实现(核心)sigmaX参数控制什么?sigmaX是高斯核在X方向的标准差,值越大表示权重分布越分散,去噪效果越强但可能更模糊;值越小表示权重越集中,细节保留更好但去噪效果减弱。示例3-7:高斯滤波vs均值滤波(去高斯噪声)第四步:对比实验设计为什么要在相同核大小下对比?因为这样可以公平地比较两种滤波方法的性能差异,排除核大小因素的影响,专注于方法本身的特性比较。示例3-7:高斯滤波vs均值滤波(去高斯噪声)第五步:结果验证与展示示例3-7:高斯滤波vs均值滤波(去高斯噪声)运行结果:如图3-7所示,相同5×5核下,高斯滤波的去噪效果与均值滤波相当,但Lena的面部细节,如眉毛、嘴角更清晰,无明显模糊,体现高斯滤波的优势。第六步:资源释放等待按键后关闭所有窗口,释放系统资源示例3-7:高斯滤波vs均值滤波(去高斯噪声)中值滤波(MedianFilter)函数:cv2.medianBlur(src,ksize),ksize为滤波核大小,且必须是奇数,如3、5。优势:能有效消除椒盐噪声,因为椒盐噪声是极端值,排序后不会成为中值,且对细节模糊少;缺点:对高斯噪声效果差;原理:用当前像素周围k×k区域的“中值”替换当前像素值——将区域内像素值排序,取中间值;先导入必要的库OpenCV核心库处理数值数组示例3-8:中值滤波去椒盐噪声第一步:中值滤波原理理解中值滤波的核心原理是用当前像素周围k×k区域的像素值中值替换当前像素值,通过对局部区域像素值排序取中间值来消除极端噪声。为什么中值滤波特别适合处理椒盐噪声?因为椒盐噪声是极端的黑白点(0或255),在排序后不会成为中值,从而被有效滤除。示例3-8:中值滤波去椒盐噪声第二步:椒盐噪声生成(准备测试数据)为什么要用noise_ratio/2?因为我们要均分噪声比例,一半给盐噪声(白点),一半给椒噪声(黑点),确保噪声分布均衡且符合实际场景。示例3-8:中值滤波去椒盐噪声第三步:中值滤波实现(核心)为什么核大小必须是奇数?因为奇数核有明确的中心点,便于确定滤波窗口的中心位置,确保滤波计算的准确性。示例3-8:中值滤波去椒盐噪声第四步:对比实验设计为什么要与高斯滤波对比?因为通过对比可以清晰展示中值滤波在处理椒盐噪声方面的独特优势,帮助理解不同滤波方法的适用场景。示例3-8:中值滤波去椒盐噪声第五步:结果验证与展示示例3-8:中值滤波去椒盐噪声运行结果:如图3-8所示,3×3中值滤波已基本消除椒盐噪声,5×5核完全消除噪声;而高斯滤波后仍有大量黑白小点,证明“中值滤波是椒盐噪声的最佳选择”。第六步:资源释放等待按键后关闭所有窗口,释放系统资源示例3-8:中值滤波去椒盐噪声滤波方法选择总结3.2.3滤波方法选择总结噪声类型推荐滤波方法不推荐方法核心参数建议高斯噪声高斯滤波中值滤波核大小
3×3~5×5,sigmaX=1~2椒盐噪声中值滤波高斯滤波、均值滤波核大小
3×3(噪声少)、5×5(噪声多)混合噪声高斯滤波
+中值滤波单一滤波先高斯去高斯噪声,再中值去椒盐噪声3.3图像边缘检测图像边缘检测边缘是图像中
“灰度值突变”的区域,如物体轮廓、文本边框,边缘检测的目标是提取这些区域,为后续的目标识别、形状分析铺路。两种常用边缘检测算法Canny边缘检测Sobel算子Sobel算子3.3.1原理通过计算图像在
“水平方向”和“垂直方向”的灰度变化梯度,梯度越大,边缘越明显,分别检测水平边缘和垂直边缘;2.classifier.detectMultiScale():检测目标函数:cv2.Sobel(src,ddepth,dx,dy,ksize)ddepth:输出图像深度,通常用cv2.CV_64F,避免梯度负值被截断;dx:x方向导数,1表示检测水平边缘,0表示不检测;dy:y方向导数,1表示检测垂直边缘,0表示不检测;ksize:Sobel核大小,必须是奇数,如3、5,默认3;注意梯度可能为负,如从亮到暗的边缘,需用cv2.convertScaleAbs()取绝对值,避免显示为黑色。先导入必要的库OpenCV核心库处理数值数组示例3-9:用Sobel算子检测道路边缘第一步:读取图像+格式验证这里直接使用图像文件名,前提是图像文件与代码在同一目录;后面应该加判断ifcolor_imgisNone,确保图像读取成功,避免后续处理出错。示例3-9:用Sobel算子检测道路边缘第二步:图像预处理为什么转灰度?因为彩色图有3个通道,灰度图只有1个通道,能大幅减少计算量,而且边缘检测主要依赖亮度差异信息。参数里"(3,3)"是滤波核大小;"sigmaX=1"是高斯标准差。为什么要先滤波?因为原始图像可能有噪声,高斯滤波能平滑噪声,避免噪声被误检为边缘。示例3-9:用Sobel算子检测道路边缘第三步:Sobel水平边缘检测参数里"CV_64F"表示输出图像深度为64位浮点型,避免负梯度值被截断;"dx=1,dy=0"表示计算x方向(水平)梯度;"ksize=3"是Sobel核大小。为什么需要这一步?因为梯度值可能为负数(从亮到暗的变化),取绝对值后才能正确显示为灰度图像。示例3-9:用Sobel算子检测道路边缘第四步:Sobel垂直边缘检测参数里"dx=0,dy=1"表示计算y方向(垂直)梯度。这样我们就能分别得到水平和垂直两个方向的边缘信息。示例3-9:用Sobel算子检测道路边缘第五步:边缘结果融合参数里两个"0.5"是权重系数,表示各取50%进行融合;"0"是偏置项。示例3-9:用Sobel算子检测道路边缘第六步:结果显示与对比示例3-9:用Sobel算子检测道路边缘运行结果:如图3-9所示,水平边缘图中,道路的水平车道线呈白色线条;垂直边缘图中,路边的交通标志、柱子呈白色线条;合并图中,道路的所有边缘,如车道线、路边,均清晰,无明显噪声。Canny边缘检测3.3.2Canny边缘检测Canny是目前最优秀的边缘检测算法,采用“多阶段处理”,边缘检测更精准、抗噪声能力更强。步骤高斯滤波:去噪,与Sobel前的去噪一致;1.计算梯度:用Sobel算子计算梯度大小和方向;2.非极大值抑制(NMS):消除边缘上的“非最大值”像素,使边缘更细;3.双阈值筛选:用“高阈值”和“低阈值”筛选边缘——高于高阈值的是确定边缘,低于低阈值的是噪声,介于两者之间的需看是否与确定边缘相连,相连则保留,否则丢弃。4.Canny边缘检测(CannyEdgeDetection)核心函数:cv2.Canny(image,threshold1,threshold2,apertureSize)threshold1:低阈值,通常为高阈值的1/2~1/3,如50;threshold2:高阈值,如150;apertureSize:Sobel核大小,默认3。先导入必要的库OpenCV核心库示例3-10:Canny边缘检测vsSobel算子第一步:读取图像+预处理为什么转灰度?因为边缘检测主要依赖亮度信息,灰度图能大幅减少计算量。这里直接使用图像文件名,前提是图像文件与代码在同一目录;后面应该加判断`ifcolor_imgisNone`,确保图像读取成功。参数里"(5,5)"是滤波核大小;"sigmaX=1"是高斯标准差。为什么要用5×5核?因为硬币图像需要较强的去噪效果,但又要避免过度模糊边缘。示例3-10:Canny边缘检测vsSobel算子第二步:Sobel算子对比(理解Canny基础)这里展示了传统边缘检测方法,边缘较粗且有噪声,为后续Canny的优越性做铺垫。示例3-10:Canny边缘检测vsSobel算子第三步:Canny边缘检测核心参数里"50"是低阈值,"150"是高阈值。Canny内部自动完成了四个步骤:高斯去噪→计算梯度→非极大值抑制→双阈值筛选。示例3-10:Canny边缘检测vsSobel算子第四步:多阈值对比实验通过对比理解阈值选择的重要性。示例3-10:Canny边缘检测vsSobel算子第五步:结果显示与对比示例3-10:Canny边缘检测vsSobel算子运行结果:如图3-10所示,Sobel边缘图中,硬币边缘较粗,且背景有少量噪声;Canny(50,150)图中,硬币边缘细且连续,背景干净,完美保留所有硬币的轮廓;阈值过低(30,100)会引入噪声,过高(80,200)会丢失边缘,证明“双阈值需合理搭配”。第五步:结果显示与对比示例3-10:Canny边缘检测vsSobel算子等待按键后关闭所有窗口,释放系统资源Canny阈值选择技巧场景适配:复杂场景,如多物体,用较低阈值从而保留更多边缘,简单场景如单一物体,用较高阈值从而减少噪声。调试方法:先固定低阈值,逐步提高高阈值,直到边缘无明显噪声;再微调低阈值,确保边缘完整;经验法则:高阈值=低阈值
×2~3,如低50→高100~150;任务实践任务1:身份证图像预处理2.按流程预处理:灰度化→高斯滤波(3×3核)→自适应阈值二值化,解决身份证光照不均;3.用Canny边缘检测提取身份证轮廓(阈值50,150);4.显示“原图→灰度图→滤波图→二值化图→边缘图”的完整流程,保存边缘图为“id_card_edges.jpg”。1.读取一张身份证彩色图像;任务:2:
噪声图像去噪对比2.对椒盐噪声图:用3×3和5×5中值滤波去噪,对比效果;3.对高斯噪声图:用3×3高斯滤波(sigmaX=1)和5×5均值滤波去噪,对比效果;4.总结“不同噪声对应的最优去噪方法”,保存所有去噪图。1.读取一张灰度图像,分别添加10%椒盐噪声和方差0.01的高斯噪声;拓展实训文本图像预处理:灰度化→去噪→二值化实训1实训目标3.实现清晰的文本二值化效果。2.能根据文本图像质量调整滤波核大小和二值化阈值;1.掌握“灰度化→去噪→二值化”的标准文本预处理流程;准备1张含噪声的文本图像,如手机拍摄的打印文档,存在轻微倾斜和噪声,命名为“noisy_text.jpg”;实训准备素材方面核心技术灰度化(cv2.cvtColor)、高斯滤波(cv2.GaussianBlur)、自适应阈值二值化(cv2.adaptiveThreshold)。实训步骤步骤1:分析实训流程文本预处理的核心是“突出文字,消除背景噪声”,流程如下:灰度图(简化数据)高斯滤波(去拍摄噪声)彩色图自适应二值化(解决光照不均,文字变纯白、背景变纯黑)步骤2:编写实训代码先导入必要的库OpenCV核心库第一步:读取图像+格式验证这里直接使用图像文件名,前提是图像文件与代码在同一目录;怕图像路径错了加载失败,能及时提示"文本图像读取失败!",实际项目里这种容错很重要。步骤2:编写实训代码第二步:图像灰度化为什么先转灰度?因为彩色图有3个通道,灰度图只有1个通道,能大幅减少计算量,而且文本识别主要依赖亮度信息,灰度图更合适。步骤2:编写实训代码第三步:高斯滤波去噪参数里"(3,3)"是滤波核大小,我们同时尝试3×3和5×5两种核;"sigmaX=1"是高斯标准差,控制滤波强度。为什么用高斯滤波而不是其他滤波?因为高斯滤波能有效消除随机噪声,同时较好地保留文字边缘细节。步骤2:编写实训代码第四步:自适应阈值二值化用高斯加权计算局部阈值是局部区域大小,必须是奇数;调节常数是反转二值化模式,让文字变白、背景变黑。步骤2:编写实训代码第五步:多方案对比与最优选择同时对3×3滤波和5×5滤波的结果进行二值化,通过对比选择最优效果。通常3×3滤波能更好保留文字细节,5×5滤波可能过度模糊导致文字断裂。步骤2:编写实训代码第六步:结果显示与保存步骤2:编写实训代码实训步骤步骤3:运行与验证运行代码:执行pythonexp1_text_preprocessing.py;实训步骤步骤3:运行与验证流程对比:观察6个窗口,从“彩色图”到“二值化图”,文字逐渐清晰,背景噪声逐渐减少;最优选择:3×3滤波后的二值化图中,文字笔画完整、无断裂,背景无明显噪声;5×5滤波后的图文字可能轻微模糊;实训步骤步骤3:运行与验证扩展尝试:若文字仍有噪声,调整adaptiveThreshold的C值,如改为3;若文字断裂,减小C值,如改为1。滤波作用自适应阈值优势运行结果文本预处理中,高斯滤波的核大小不宜过大(5×5及以上),否则会模糊文字边缘,导致二值化后文字断裂;相比全局阈值,自适应阈值能处理文本图像的
“局部光照不均”,如边缘阴影,确保全图文字清晰;实训结果与分析硬币边缘检测与计数实训2实训目标3.初步实现基于轮廓数量统计的硬币计数,理解边缘检测的应用价值。2.能通过Canny边缘检测清晰提取硬币轮廓;1.掌握“去噪→二值化→边缘检测”的物体轮廓提取流程;实训准备素材方面核心技术准备1张含多枚硬币的图像,硬币无重叠,背景简单,命名为“coins.jpg”;高斯滤波、Canny边缘检测、轮廓查找(cv2.findContours)。实训步骤步骤1:分析实训流程硬币计数的基础是“提取每个硬币的轮廓”,流程如下:灰度图高斯滤波(去噪)彩色图Canny边缘检测(提轮廓)轮廓查找(计数)绘制轮廓可视化先导入必要的库OpenCV核心库处理数值数组步骤2:编写实训代码第一步:读取图像+格式验证这里直接使用图像文件名,前提是图像文件与代码在同一目录;怕图像路径错了加载失败,能及时提示"硬币图像读取失败!",实际项目里这种容错很重要。步骤2:编写实训代码第二步:图像预处理为什么转灰度?因为彩色图有3个通道,灰度图只有1个通道,能大幅减少计算量,而且边缘检测主要依赖亮度差异信息。参数里"(5,5)"是滤波核大小;"sigmaX=1.5"是高斯标准差。为什么要先滤波?因为原始图像可能有噪声,高斯滤波能平滑噪声,避免噪声被误检为边缘。步骤2:编写实训代码第三步:Canny边缘检测核心是低阈值,低于此值的边缘点被丢弃;是高阈值,高于此值的边缘点被确认为强边缘;介于两者之间的边缘点需要与强边缘连接才会被保留。步骤2:编写实训代码第四步:轮廓查找与计数表示只检测最外层轮廓,忽略硬币内部可能存在的反光区域;压缩水平、垂直和对角线段,只保留端点,节省内存。步骤2:编写实训代码第五步:结果可视化避免修改原始数据参数里"(0,255,0)"是绿色BGR值,"2"是线宽;添加红色计数文字"(20,40)"是文字位置"FONT_HERSHEY_SIMPLEX"是字体类型,"1.2"是字体大小步骤2:编写实训代码第六步:显示与保存结果显示原图显示边缘图显示最终结果步骤2:编写实训代码实训步骤步骤3:运行与验证1.运行代码:执行pythonexp2_coins_detection.py;边缘检测:Canny边缘图中,每个硬币的轮廓完整,无明显断裂或噪声;计数准确:轮廓数量与实际硬币数量一致;若多计数,可能是背景噪声,需提高Canny高阈值;若少计数,需降低低阈值;轮廓绘制:彩色原图上,每个硬币被绿色轮廓包围,左上角红色文字显示计数结果;实训步骤步骤3:运行与验证3.异常处理:若存在“小噪声轮廓”,可在轮廓查找后添加“轮廓面积筛选”,如只保留面积大于1000的轮廓,代码如下:实训步骤步骤3:运行与验证#筛选面积大于1000的轮廓(去除小噪声)valid_contours=[cntforcntincontoursifcv2.contourArea(cnt)>1000]coin_count=len(valid_contours)预处理关键轮廓查找参数硬币边缘检测前,高斯滤波的sigmaX需适当(1.5~2),过小则噪声残留,过大则轮廓模糊;cv2.RETR_EXTERNAL只保留最外层轮廓,避免将硬币内部的反光区域误判为独立轮廓;实训结果与分析运行结果如图3-12所示,可以看出硬币被明显“数”多了。这种时候我们就要通过调整阈值的方式来手动调整参数。具体方法就是将Canny高阈值提高,如图3-13所示,把图中代码红框框出部分的高阈值提高到350。实训结果与分析图3-12硬币边缘检测与计数运行结果如图3-12所示,可以看出硬币被明显“数”多了。这种时候我们就要通过调整阈值的方式来手动调整参数。具体方法就是将Canny高阈值提高,如图3-13所示,把图中代码红框框出部分的高阈值提高到350。实训结果与分析图3-13提高Canny高阈值运行结果如图3-12所示,可以看出硬币被明显“数”多了。这种时候我们就要通过调整阈值的方式来手动调整参数。具体方法就是将Canny高阈值提高,如图3-13所示,把图中代码红框框出部分的高阈值提高到350。实训结果与分析图3-14调整阈值后再次统计的结果
本章小结预处理是计算机视觉的关键前提现实图像常存在计算量大、光照不均、噪声干扰、边缘模糊等问题,预处理通过改善图像质量、突出有用信息,为后续特征提取、目标检测等任务铺路,是计算机视觉流程中不可或缺的“第一步”;四类核心技术图像灰度化与二值化简化图像数据(灰度化降维、二值化突出目标),图像去噪消除干扰像素,边缘检测提取目标轮廓,四类技术覆盖“简化-净化-特征提取”的预处理全流程;技术选择需匹配场景特性灰度化优先用OpenCV内置函数(cv2.cvtColor)保证效率;二值化中,光照均匀场景选全局阈值(cv2.threshold),光照不均场景选自适应阈值(cv2.adaptiveThreshold);去噪需按噪声类型匹配方法如高斯噪声用高斯滤波、椒盐噪声用中值滤波;边缘检测中,Sobel算子适合分方向提取边缘,Canny算法适合高精度轮廓检测,但需合理设置双阈值,如课后实训二的“数硬币”任务,读者
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新初三衔接 专题09 文言文高频题型+课内外对比阅读突破:文言断句、踩分翻译、内容理解、人物主旨、异同赏析、思辨类开放探究题(学生版)
- 某化工厂危品管控细则
- 2026年武汉市政务服务中心管理办公室(市民之家)招考高素质人才易考易错模拟试题(共500题)试卷后附参考答案
- 2026年普宁市公开招聘“百名创建美丽圩镇推进乡村振兴人才”举办笔试易考易错模拟试题(共500题)试卷后附参考答案
- 2026年新乡医学院招考工作人员(硕士)易考易错模拟试题(共500题)试卷后附参考答案
- 2026年恩施高中专项招考教师易考易错模拟试题(共500题)试卷后附参考答案
- 2026年开封市顺河回族区事业单位招考工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 2026年广西钦州市灵山县事业单位考试招聘485人易考易错模拟试题(共500题)试卷后附参考答案
- 2026年广西玉林容县公路养护中心(原容县公路管理局)招聘6人易考易错模拟试题(共500题)试卷后附参考答案
- 2026年广西梧州市藤县工业和信息化局招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2026年新疆第三师图木舒克市高校毕业生“三支一扶”计划招募(347人)笔试参考题库及答案详解
- 2026年吉林省中考数学试题【含答案解析】
- 2026年医师定期考核题库(完整版)及答案
- 成都地铁车辆基地总图及工艺设计要求
- 2026高考语文全题型万能答题模板与满分公式(打印版)
- 2026年大学GIS应用开发期末考前冲刺练习题库新版附答案详解
- 2026年全国硕士研究生招生考试政治试题及其答案
- 冲压厂奖惩制度
- 成都泡桐中学初一入学语文分班考试真题含答案
- 人工智能网络安全
- 黑龙江大学《审计学》2025 学年第二学期期末试卷
评论
0/150
提交评论