计算机视觉应用开发案例教程(OpenCV)课件 第8章 计算机视觉项目实战_第1页
计算机视觉应用开发案例教程(OpenCV)课件 第8章 计算机视觉项目实战_第2页
计算机视觉应用开发案例教程(OpenCV)课件 第8章 计算机视觉项目实战_第3页
计算机视觉应用开发案例教程(OpenCV)课件 第8章 计算机视觉项目实战_第4页
计算机视觉应用开发案例教程(OpenCV)课件 第8章 计算机视觉项目实战_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

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

文档简介

第8章

计算机视觉项目实战计算机视觉应用开发案例教程目录CONTENT8.1实战项目1:基于分水岭算法的重叠药片计数系统018.2实战项目2:基于YOLO模型的实时物件检测系统02本章小结03课后习题04引言图像预处理阈值分割轮廓检测基于分水岭算法的重叠药片计数系统

整合技术,使读者建立积累对计算机视觉的完整项目的整体框架开发经验。本章将通过两个综合项目:基于YOLO模型的实时物件检测系统引言工作情境当下AI赋能实体经济的趋势里,“技术落地”是核心

工作情境制药厂的

“重叠药片计数系统”安防场景的“实时物件检测系统”“工业场景里怎么标定参数”“遇到异常情况怎么处理”不管你是想积累项目经验,还是为实际工作做准备,这些实战都能帮你明白:“技术落地”不复杂,关键是把学过的本领用对地方,解决真正的需求。工作情境8.1实战项目1:基于分水岭算法的重叠药片计数系统

项目目标8.1.1项目目标3.绘制分割边界,统计药片数量。2.实现重叠药片的有效分割,区分每个药片;1.熟练掌握分水岭算法的完整流程:预处理→前景背景确定→标记→分割;项目准备8.1.2准备一张

“白色背景上的重叠药片”图像,如素材库中为读者准备的“pills_overlapped.jpg”项目准备素材方面核心技术形态学开运算、距离变换、分水岭算法、轮廓提取。项目实施8.1.3项目步骤步骤1:明确实验流程文本预处理的核心是“突出文字,消除背景噪声”,流程如下:读取图像灰度化去噪阈值分割开运算确定前景背景标记分水岭分割绘制边界计数导入两个必要的库OpenCV核心库处理数值数组步骤2:编写实训代码第一步:读取图像+灰度化读彩色图怕图片路径错了读不出来,能及时提示“读取失败”,工业场景里这种容错很重要。为什么转灰度?因为彩色图有3个通道(BGR),灰度图只有1个通道,能减少计算量,还能避免颜色干扰。步骤2:编写实训代码第二步:预处理优化(去噪+对比度增强)控制对比度强度,1.2属于“温和增强”,避免把噪声也放大把图像分成12x12的小区域处理把增强效果应用到灰度图上滤波核大小颜色相似度阈值空间相似度阈值步骤2:编写实训代码第三步:阈值分割用高斯加权的局部阈值,比全局阈值更适应光照变化“反二值化”,让药片变成白色、背景变成黑色步骤2:编写实训代码第四步:形态学操作小核处理细节腐蚀掉小噪声点把药片轮廓恢复回来步骤2:编写实训代码第四步:形态学操作因为这个区域可能有小碎片容易被误分割,这样处理能强化边界,避免把一个药片分成两个。步骤2:编写实训代码第五步:确定前景、背景与未知区域用3次膨胀让背景“包围所有药片”,确保没有遗漏把“药片区域”转成“离边缘越远值越大的图”过滤面积小于120的小噪声背景减去前景,这部分是后续分水岭要分割的“重叠区”步骤2:编写实训代码第六步:创建标记+应用分水岭把每个前景中心标成不同的数字把背景从“0”改成“1”告诉算法“这里是要分割的不确定区”算法会根据标记分割未知区域步骤2:编写实训代码第七步:计数+结果保存步骤2:编写实训代码第七步:计数+结果保存步骤2:编写实训代码步骤3:运行与验证项目步骤验证结果调整参数保存结果若分割不完整,调整距离变换的阈值系数(如0.5→0.7),或修改膨胀/开运算的迭代次数;分水岭结果图中,重叠药片被红色边界分开,每个药片为独立区域,计数与实际药片数一致;确认生成“pills_watershed_result.jpg”,红色边界清晰,计数文字明确。项目结果8.1.4分水岭关键前景需用“距离变换+阈值”获取“确定的物体中心”,避免前景包含重叠区域;背景需膨胀到包围所有物体,确保无遗漏;运行结果如图8-1所示,分水岭结果图中重叠药片被红色边界分开,顶部蓝色文字显示药片计数,标注“分割完整,无重叠误判”。实训结果与分析图8-1重叠药片分水岭分割结果图分析与调参8.1.5运行结果与解析图8-2参数调整过程代码中的可调参代码解析对比度增强:clahe=cv2.createCLAHE(clipLimit=1.2,tileGridSize=(12,12))clipLimit:对比度增强强度(值越小越温和,避免放大噪声)tileGridSize:局部区域大小(值越大,处理越平滑)代码中的可调参代码解析去噪参数:img_median=cv2.medianBlur(img_clahe,7)核大小(7):值越大去噪越强,但可能模糊边缘代码中的可调参代码解析双边滤波:cv2.bilateralFilter(img_median,9,70,70)第二个参数(9):滤波核大小后两个参数(70,70):颜色/空间相似度阈值(值越大,模糊范围越广)代码中的可调参代码解析自适应阈值:cv2.adaptiveThreshold(...,25,10)块大小(25):值越大,对局部光照变化越不敏感常数(10):值越大,越容易将暗区域判为背景代码中的可调参代码解析形态学核与迭代:kernel_medium=np.ones((9,9),np.uint8)核大小(9,9):值越大,合并碎片能力越强cv2.morphologyEx(...,iterations=2)迭代次数(2):值越大,形态学效果越强代码中的可调参代码解析左上角区域范围:top_left_roi=img_close[0:int(h/3),0:int(w/3)]区域比例(h/3,w/3):调整为实际药片所在区域代码中的可调参代码解析前景提取阈值:cv2.threshold(img_dist,0.35*img_dist.max(),...)比例(0.35):值越大,筛选出的前景中心越少(过滤小区域)代码中的可调参代码解析前景面积过滤:min_area=120最小面积(120):值越大,过滤的小噪声越多代码中的可调参代码解析计数面积范围:if250<marker_area<1500下限(250):过滤过小碎片上限(1500):过滤过大异常区域调参过程那么麻烦在现实的工业场景中我们是怎么做到把药片“数”的那么准确的呢?药厂的流水线上快速通过的传送带上的药片是怎么被准确无误的数出来的呢?工业场景落地8.1.6硬件标准化参数定制化标定分水岭算法(或其他机器视觉算法)在工业中能落地,本质是靠“硬件先标准化所有干扰因素”,让算法面对的图像“长得几乎一样”,从而只需要一套固定参数就能稳定工作。硬件端:彻底固定拍摄条件,消除变量。核心逻辑算法端:针对固定场景做“一次性参数标定”。工业场景落地的核心逻辑:先“控制变量”,再“定制参数”异常处理:加“兜底机制”,不依赖单一算法。工业场景落地工业计数不会像实验室那样“随手拍图”,而是用专用的视觉检测工位,把所有影响图像的因素锁死:彻底固定拍摄条件,消除变量。硬件端用定制光源,比如环形光源、背光光源,确保药片表面亮度均匀,没有阴影;光照相机位置如距离、角度等完全固定,比如正上方垂直拍摄,镜头焦距锁定,确保每颗药片在图像中的大小、比例一致;拍摄工业场景落地工业计数不会像实验室那样“随手拍图”,而是用专用的视觉检测工位,把所有影响图像的因素锁死:彻底固定拍摄条件,消除变量。硬件端用纯色高对比度背景,比如黑色背景拍白色药片,避免背景干扰,让药片边缘更清晰;背景药片通过传送带或振动盘“整理姿态”,尽量避免严重重叠,如果必须处理重叠,会搭配机械结构辅助分离,比如轻震传送带。姿态工业场景落地当硬件条件固定后,算法只需要做一次“参数标定”,后续所有同场景的图像都用这套参数:针对固定场景做“一次性参数标定”。算法端先拍几十/几百张该场景下的标准图像,包含正常药片、少量重叠、可能的轻微杂质,手动标注正确计数;步骤工业场景落地当硬件条件固定后,算法只需要做一次“参数标定”,后续所有同场景的图像都用这套参数:针对固定场景做“一次性参数标定”。算法端用标注好的样本,自动或手动调整算法参数,比如阈值、滤波核大小、面积范围,找到能覆盖99.9%以上正常情况的“最优参数组合”;优化参数确定后写入程序,后续所有进入该工位的图像,都直接用这套参数处理,不需要任何人工干预。固定工业场景落地工业场景不会只靠分水岭算法,会搭配其他逻辑确保稳定性:加“兜底机制”,不依赖单一算法。异常处理根据药片实际尺寸,设定“最小-最大面积范围”,比如实际药片直径5mm,对应图像中面积100-200像素,超出这个范围的直接排除,避免杂质或碎片干扰;面积过滤结合轮廓分析,比如药片是圆形,用圆度阈值过滤非圆形的干扰;形状校验工业场景落地工业场景不会只靠分水岭算法,会搭配其他逻辑确保稳定性:加“兜底机制”,不依赖单一算法。异常处理如果某张图的计数超出正常范围,比如正常是每帧50±2颗,突然出现30颗或70颗,会触发报警,让人工复核,而不是直接输出错误结果。异常报警固定场景定制参数小结核心落地逻辑药企的

“药片瓶装计数”工位传送带速度固定、光源固定、相机角度固定,针对某一种药片,比如某规格的圆形药片,提前标定好参数,后续每天生产几万瓶,都是用同一套算法参数计数;电子厂的

“芯片计数”“电阻计数”原理完全一样——先靠硬件锁死拍摄条件,再用一套固定参数处理,准确率能稳定在99.95%以上,工业场景对准确率要求极高,通常允许的误判率低于0.1%。小结工业机器视觉的

“算法能力”,很大程度上是靠

“硬件标准化”

撑起来的。如果硬件条件混乱,如光照忽明忽暗、拍摄角度随便变,再厉害的算法也需要频繁调参数,根本无法落地;但只要硬件先“控住变量”,哪怕是分水岭这种需要参数调优的算法,也能稳定工作。8.2实战项目2:基于YOLO模型的实时物件检测系统YOLO模型简介YOLO(YouOnlyLookOnce)是一种基于深度学习的实时目标检测算法,由JosephRedmon等人于2016年提出,其核心优势是兼顾检测速度与精度,非常适合实时场景,如摄像头实时识别。YOLO模型简介与传统的两阶段检测算法(先生成候选区域再分类)不同,YOLO将目标检测视为单一的回归问题,通过一次神经网络计算即可同时预测图像中所有目标的边界框和类别概率,因此检测速度极快,基础版本可达到45帧/秒。YOLO系列YOLOv8版本YOLOv3YOLOv3通过多尺度特征检测(利用不同尺寸的特征图识别大小目标)和残差网络结构(提升特征提取能力),在保证速度的同时显著提升了检测精度,支持80种常见物体,如人、汽车、手机、杯子等的识别。YOLOv3机器人视觉自动驾驶实时监控项目目标8.2.1项目目标调用电脑摄像头采集实时视频流,实现对画面中常见物体,如人、手机、杯子等的实时检测;1.用绿色边框标记检测到的物体,在边框旁显示中文类别名称及置信度,如“手机92%”;2.画面左上角显示实时检测时间(毫秒级),便于评估性能;3.支持按任意键退出程序,并自动保存最后一帧的检测结果(含标记信息)到本地文件夹。4.项目实施8.2.2步骤1:创建文件夹新建文件准备以下文件并放入该文件夹中文字体文件:STSONG.TTF,用于正常显示中文标签,可从系统字体文件夹中复制,路径通常为“C:\Windows\Fonts”。类别名称文件:object_names.txt,包含80种物体的中文名称,每行一个,如“人”“汽车”“手机”等;预训练模型文件:yolov3.cfg(模型配置文件)、yolov3.weights(模型权重文件,可从YOLO官网或素材库获取);步骤1:创建文件夹新建文件安装在PyCharm/VSCode的“Terminal”中粘贴以下命令,按Enter安装,若已安装可跳过此步骤:步骤2:安装Python库pipinstallopencv-pythonnumpypillow若安装缓慢,可添加国内镜像源:pipinstallopencv-pythonnumpypillow-i/pypi/simple/

完整代码步骤3导入4个必要的库OpenCV核心库处理数值数组解决中文显示计算检测耗时完整代码第一步:加载中文字体+物体类别指定字体文件路径设置字号20读取物体类别去掉每行的换行符,整理成列表如果找不到文件,会提示错误并退出完整代码第二步:加载YOLOv3预训练模型加载模型try-except容错配置文件:定义模型结构权重文件:模型训练好的“经验参数”完整代码创建设摄像头捕捉器,0代表电脑默认摄像头,外接摄像头就改成1检查摄像头是否可用用来存储最后一帧画面,方便退出时保存;打印提示第三步:初始化摄像头+设置变量完整代码第四步:实时检测主循环完整代码第四步:实时检测主循环完整代码第五步:筛选有效目标+消除重复边框完整代码第五步:筛选有效目标+消除重复边框完整代码第六步:绘制边框+中文标签+显示保存完整代码第六步:绘制边框+中文标签+显示保存完整代码第六步:绘制边框+中文标签+显示保存完整代码第七步:释放资源+保存最后一帧生成时间戳关闭摄像头关闭所有显示窗口保存最后一帧完整代码操作说明8.2.3文件路径配置确保yolov3.cfg、yolov3.weights、object_names.txt和STSONG.TTF与代码文件在同一文件夹“RealTime_Detection”中;操作说明若摄像头无法调用,可尝试修改代码中cv2.VideoCapture(0)的参数(0为默认摄像头,1为外接摄像头)。画面中绿色框标记物体,红色文字显示中文类别及置信度,左上角显示检测耗时;按键盘任意键,如Enter、空格等退出程序,最后一帧结果会自动保存为“last_detection_时间戳.jpg”。运行代码后,会自动打开摄像头,实时显示检测画面;运行程序运行结果打开“RealTime_Detection”文件夹,可找到保存的最后一帧图片,包含所有检测标记。如图8-4所示。查看结果图8-4实时物件检测常见问题解决8.2.4常见问题解决问题现象解决方法模型文件缺失报错确认两个模型文件在文件夹里,没下载就去YOLO官网或素材库获取;中文标签显示乱码检查STSONG.TTF是否存在,可替换成SIMHEI.TTF(黑体),确保字体路径正确;摄像头无法打开关闭占用摄像头的软件(如微信、Zoom),或把cv2.VideoCapture(0)改成1;检测速度慢(卡顿)关闭占CPU/GPU的程序,或把(416,416)改成(320,320)(降低分辨率提速);漏检或误检调整置信度阈值——漏检就把prob>0.5改成0.3,误检就改成0.7。本章小结预处理是计算机视觉的关键前提本章聚焦计算机视觉工程化实践,通过“重叠药片计数系统”与“基于YOLO模型的实时物件检测系统”两大项目,整合了图像预处理、轮廓检测、形态学操作、深度学习模型应用等前期核心技术。四类核心技术重叠药片计数系统实现了从图像分析到生产线实际落地,解决了漏检、误检等实际问题;实时物件检测系统则依托YOLO的高效检测能力,完成摄像头视频流处理、中文标签显示与结果保存,覆盖静态与动态场景。项目均配套详细操作指南与问题解决方案,帮助读者从技术应用进阶到工程化开发,建立完整的项目开发思维与问题调试能力。课后习题一、选择题课后习题1.重叠药片计数系统中,获取“确定的物体中心”以区分重叠药片,核心采用的技术是(

)A.高斯滤波去噪B.

距离变换+阈值处理C.形态学开运算D.双边滤波增强边缘一、选择题课后习题2.YOLO模型相较于传统两阶段目标检测算法,最核心的优势是(

)A.仅支持80种物体识别,分类精度更高B.将检测视为单一回归问题,一次计算完成,速度快C.

仅能处理静态图像,兼容性更强D.无需预训练权重文件,部署更便捷一、选择题课后习题3.重叠药片计数系统中,使用“形态学

温馨提示

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

最新文档

评论

0/150

提交评论