计算机视觉应用开发案例教程(OpenCV) 课件 第5-9章 特征检测与匹配-计算机视觉与深度学习_第1页
计算机视觉应用开发案例教程(OpenCV) 课件 第5-9章 特征检测与匹配-计算机视觉与深度学习_第2页
计算机视觉应用开发案例教程(OpenCV) 课件 第5-9章 特征检测与匹配-计算机视觉与深度学习_第3页
计算机视觉应用开发案例教程(OpenCV) 课件 第5-9章 特征检测与匹配-计算机视觉与深度学习_第4页
计算机视觉应用开发案例教程(OpenCV) 课件 第5-9章 特征检测与匹配-计算机视觉与深度学习_第5页
已阅读5页,还剩525页未读 继续免费阅读

下载本文档

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

文档简介

计算机视觉应用第5章

特征检测与匹配目录CONTENT5.1角点检测015.2尺度不变特征检测025.3特征匹配03任务实践04拓展实训05本章小结06课后习题07在计算机视觉任务中“如何让计算机识别不同图像中的同一目标”是核心问题——比如从一堆照片中找到包含“猫咪”的图像,或把多幅风景照拼接成全景图。解决这类问题的关键,就是找到图像中的“特征”:图像中稳定、独特的区域,如角点、边缘、纹理,这些特征能在不同角度、尺度、光照下保持一致性,是目标识别、图像拼接、三维重建的基础。引言引言其技术突破与产业应用始终呼应着国家发展的战略需求。从工业生产线的精密检测到航空航天的遥感测绘,从智能交通的场景识别到农业领域的精准作业,这项技术正成为推动新质生产力发展的重要支撑。作为计算机视觉的“感知核心”特征检测与匹配95后大国工匠郭东妮带领团队扎根纺织厂一线,通过优化特征匹配算法构建布匹瑕疵检测系统,历经上千次迭代将误检率控制在0.1%以下,用技术创新填补国内空白,生动诠释了“既沉得下去扎根一线,又顶得上来攻坚破难”的劳模精神。引言本章快速上手实际应用从“基础角点检测”入手,逐步过渡到“尺度不变特征(SIFT、ORB)”和“特征匹配”,最终通过实操掌握特征技术实际应用。所有内容均以OpenCV函数为核心,避免复杂数学推导,聚焦“怎么用、用在哪”,确保初学者能快速上手,也和高职教育的原则相契合。工作情境随着新型基建的推进,全景监控、智能交通等场景对“目标关联与跟踪”的需求越来越多——比如把多幅监控图拼成全景,或者跟踪视频里的车辆轨迹,工作情境这些都需要让机器“认出不同图里的同一个目标”;特征检测与匹配技术,就是帮机器实现这一点的关键。本模块要学的角点检测、ORB特征提取和匹配算法,就是干这个的:用ORB特征能快速拼接监控全景,用角点检测能稳定跟踪车辆;工作情境不管你是想做视觉项目开发,还是应对岗位里的多图像协同任务;这些技术都能帮你从“处理单张图”升级到“处理多图联动”,实用又贴合当下需求。学习目标知识目标3.熟悉特征匹配(暴力匹配、FLANN匹配)的原理与步骤,了解单应性矩阵在图像拼接中的作用。2.理解尺度不变特征(SIFT、ORB)的工作原理与特性,学会其关键点检测与描述子生成方法。1.掌握角点检测(Harris、Shi-Tomasi)的基本原理,理解其与灰度变化的关系及适用场景。能力目标3.能够结合单应性矩阵完成图像配准,并具备初步的图像拼接和目标定位能力。2.能够运用ORB特征检测与暴力匹配算法,实现多幅图像的特征匹配与简单拼接。1.能够使用OpenCV实现Harris、Shi-Tomasi角点检测,并能通过参数调试优化检测结果。素养目标3.从理论到落地的应用思维:学习我国科研团队对ORB算法的改进与产业适配案例,体会将算法创新转化为实际生产力的责任担当,强化“技术为民、实践为本”的职业追求。2.开源协作与自主可控意识:通过对比SIFT(专利受限)与ORB(开源高效),树立在技术选型中注重自主可控、避免“卡脖子”的行业认知。1.精准调试与耐心实践:在参数调优与特征匹配过程中,培养细致观察、反复调试的职业习惯,理解“细节决定算法精度”的工程伦理。5.1角点检测角点检测是图像中“灰度变化剧烈”的区域,也是最基础、最常用的特征

:比如棋盘格的交叉点、书本的边角、物体的拐角等。角点的核心特点是“在两个垂直方向上都有明显的灰度变化”,相比边缘(仅一个方向变化)和平面(无变化),角点更能代表图像的关键信息。Harris角点检测5.1.1Harris角点检测是最早的角点检测算法之一,通过计算图像中每个像素的“灰度变化矩阵”,判断该像素是否为角点。OpenCV中通过cv2.cornerHarris()函数实现,用法简单且参数易调整。1.核心函数:cv2.cornerHarris()blockSize:角点检测时考虑的邻域大小,如3表示3×3邻域,通常取2-5;src:输入图像,必须是单通道灰度图,uint8或float32类型;语法:dst=cv2.cornerHarris(src,blockSize,ksize,k)ksize:Sobel算子的孔径大小,用于计算梯度,必须是奇数,通常取3;k:Harris检测系数,经验值,通常取0.02-0.04,控制角点检测的灵敏度;返回值:dst,与输入图像尺寸相同的浮点型矩阵,每个像素值表示“角点响应值”,值越大越可能是角点。棋盘格图像的交叉点是典型的角点,适合验证Harris检测效果:1.新建一个Python文件;2.导入必要的库;OpenCV核心库处理数组2.示例5-1:Harris角点检测:棋盘格图像第一步:读取图像+格式检查第一块是读图判断实际项目里这种容错很重要直接读灰度图2.示例5-1:Harris角点检测:棋盘格图像第二步:图像类型转换第一块是读图判断实际项目里这种容错很重要直接读灰度图关键步骤为什么要转float32?Harris角点检测算法要求输入图像是浮点类型,这样才能进行精确的数学运算。2.示例5-1:Harris角点检测:棋盘格图像第三步:Harris角点检测核心调用Harris检测控制角点检测的敏感度2.示例5-1:Harris角点检测:棋盘格图像第四步:角点响应值增强调用Harris检测为什么要膨胀?角点响应值可能比较分散,膨胀能让角点区域更明显,便于后续的阈值筛选和可视化。控制角点检测的敏感度做膨胀操作2.示例5-1:Harris角点检测:棋盘格图像第五步:角点筛选与标记最大响应值的1%作为阈值为什么要转彩色?要用红色标记角点,灰度图无法显示颜色;值越大筛选越严格转换彩色图标记角点将超过阈值的角点位置设为红色2.示例5-1:Harris角点检测:棋盘格图像第六步:添加文字标注添加标注白色文字在深色背景上更清晰2.示例5-1:Harris角点检测:棋盘格图像第七步:结果显示与保存添加标注白色文字在深色背景上更清晰显示检测窗口保存结果图像等待按键关闭窗口2.示例5-1:Harris角点检测:棋盘格图像运行结果窗口显示棋盘格图像,所有交叉点被红色圆点标记,无明显遗漏或误检(若有少量误检,可提高阈值至0.02×dst.max())。如图5-1所示:图5-1Harris角点检测(棋盘格图像)Shi-Tomasi角点检测5.1.2Shi-Tomasi角点检测是对Harris算法的改进,主要优化了“角点响应值的计算方式”,在检测精度和稳定性上更优,且能直接指定检测的角点数量,实用性更强。OpenCV中通过cv2.goodFeaturesToTrack()函数实现。1.核心函数:cv2.goodFeaturesToTrack()maxCorners:最多检测的角点数量,设为0表示无上限;src:输入灰度图,uint8或float32;语法:corners=cv2.goodFeaturesToTrack(src,maxCorners,qualityLevel,minDistance)qualityLevel:角点质量阈值,0-1,值越小检测到的角点越多,通常取0.01-0.1;minDistance:两个角点之间的最小距离,避免角点过于密集,通常取10-20;返回值:corners,N×1×2的浮点型数组,每个元素是角点的(x,y)坐标。同一幅图像对比两种算法的检测效果,突出Shi-Tomasi的优势:1.新建一个Python文件;2.导入必要的库;OpenCV核心库处理数组2.示例5-2:Shi-TomasivsHarris

角点检测对比第一步:读取图像+格式检查第一块是读图判断实际项目里这种容错很重要直接读灰度图2.示例5-2:Shi-TomasivsHarris

角点检测对比第二步:创建对比图像第一块是读图判断实际项目里这种容错很重要直接读灰度图判断为什么要创建两个彩色图?要在同一原始图像上分别绘制两种算法的检测结果,便于公平对比。2.示例5-2:Shi-TomasivsHarris

角点检测对比第三步:Harris角点检测实现判断复用Harris算法设置阈值增强角点用红色标记角点添加标注2.示例5-2:Shi-TomasivsHarris

角点检测对比第四步:Shi-Tomasi角点检测实现添加标注遍历绘制角点为什么要转整数?因为绘制函数需要整数坐标;2.示例5-2:Shi-TomasivsHarris

角点检测对比第五步:结果显示与保存判断双窗口显示2.示例5-2:Shi-TomasivsHarris

角点检测对比第五步:结果显示与保存判断水平拼接保存2.示例5-2:Shi-TomasivsHarris

角点检测对比如图5-2所示左窗口Harris检测的角点较密集(红色),右窗口Shi-Tomasi检测的角点数量可控(50个,绿色)且分布更均匀,无密集重叠,证明Shi-Tomasi在实用性上更优。图5-2Shi-TomasivsHarris角点检测对比运行结果5.2尺度不变特征检测角点检测仅能在“相同尺度、相同角度”的图像中稳定工作;若图像缩放或旋转,角点位置会变化,无法匹配。而尺度不变特征,如SIFT、ORB能在不同尺度、角度、光照下保持一致性,是更通用的特征,广泛用于目标识别和图像拼接。SIFT特征检测5.2.1SIFT(Scale-InvariantFeatureTransform,尺度不变特征变换)是经典的尺度不变特征算法,通过“尺度空间构建”找到不同尺度下的关键点,再生成独特的“描述子”(128维向量),实现跨尺度、跨角度的特征匹配。1.关键说明SIFT算法受专利保护,OpenCV4.x版本中,SIFT需从cv2.features2d模块调用,且需安装opencv-contrib-python(带扩展模块),安装命令:pipinstallopencv-contrib-python;SIFT的核心:“关键点”和“描述子”:关键点包含位置、尺度、方向信息;描述子用于区分不同特征,确保匹配准确性。示例5-31.新建一个Python文件;2.导入必要的库;OpenCV核心库处理数组2.示例5-3:SIFT特征检测与绘制第一步:读取图像+灰度转换第一块是读图判断确保图像读取成功读彩色图为什么要转灰度?SIFT算法在灰度图像上计算更稳定,能减少颜色干扰,提高特征检测的鲁棒性。2.示例5-3:SIFT特征检测与绘制第二步:初始化SIFT检测器创建检测器旧版本创建检测器SIFT检测器会自动设置默认参数,包括尺度空间参数、对比度阈值等。2.示例5-3:SIFT特征检测与绘制第三步:检测关键点与计算描述子创建检测器旧版本创建检测器SIFT检测器会自动设置默认参数,包括尺度空间参数、对比度阈值等。gray:输入灰度图;None:不使用掩码,处理整个图像。核心方法调用2.示例5-3:SIFT特征检测与绘制第四步:特征可视化绘制调用drawKeypoints原始彩色图

是关键点列表2.示例5-3:SIFT特征检测与绘制第五步:添加统计标注用cv2.putText添加标注动态显示检测到的关键点数量,用红色文字突出显示2.示例5-3:SIFT特征检测与绘制第六步:结果显示与信息输出用cv2.putText添加标注动态显示检测到的关键点数量,用红色文字突出显示显示结果窗口打印关键信息在命令行输出详细的检测结果2.示例5-3:SIFT特征检测与绘制第七步:结果保存保存结果图像等待按键关闭窗口2.示例5-3:SIFT特征检测与绘制第八步:资源释放等待按键后关闭所有窗口,释放系统资源2.示例5-3:SIFT特征检测与绘制如图5-3所示窗口显示树叶图像,每个SIFT关键点用“圆圈+箭头”标记——圆圈大小表示尺度,越大尺度越大,箭头表示特征方向;命令行输出关键点数量和描述子形状,如(2018,128)表示2018个关键点,每个128维。运行结果图5-3SIFT特征检测与绘制ORB特征检测5.2.2ORB(OrientedFASTandRotatedBRIEF)OpenCV开源的尺度不变特征算法,结合了FAST角点检测(快速)和BRIEF描述子(简洁),并增加了“方向和尺度不变性”,免费无专利限制,速度比SIFT快,是实际项目的首选。1.核心优势

速度快:比SIFT快10倍以上;

鲁棒性强:支持尺度、角度、光照变化;

描述子维度低:32维(SIFT是128维),匹配效率高。

开源免费:无专利限制,可商用;示例5-41.新建一个Python文件;2.导入必要的库;OpenCV核心库处理数组2.示例5-4:ORB

特征检测(对比SIFT)第一步:读取图像+灰度转换第一块是读图判断确保图像读取成功为什么要转灰度?ORB算法在灰度图像上计算效率更高,能充分发挥其速度优势。读彩色图2.示例5-4:ORB

特征检测(对比SIFT)第二步:初始化ORB检测器创建检测器ORB算法结合了FAST角点检测的速度优势和BRIEF描述子的简洁性,还增加了方向和尺度不变性。2.示例5-4:ORB

特征检测(对比SIFT)第三步:检测关键点与计算描述子创建检测器核心方法调用ORB算法结合了FAST角点检测的速度优势和BRIEF描述子的简洁性,还增加了方向和尺度不变性。gray:输入灰度图;None:不使用掩码关键点信息:keypoints包含每个关键点的位置、尺度、方向等信息;descriptors是32维的特征描述子,形状为(N,32),N是关键点数量,维度远低于SIFT的128维。2.示例5-4:ORB

特征检测(对比SIFT)第四步:特征可视化绘制调用drawKeypoints绘制完整的关键点信息color=(0,255,0)"设置关键点为绿色;2.示例5-4:ORB

特征检测(对比SIFT)第五步:添加统计标注调用drawKeypoints绘制完整的关键点信息动态显示检测到的关键点数量,用红色文字突出显示。color=(0,255,0)"设置关键点为绿色;用cv2.putText添加标注2.示例5-4:ORB

特征检测(对比SIFT)

第六步:结果显示与信息输出显示结果窗口打印关键信息在命令行输出详细的检测结果2.示例5-4:ORB

特征检测(对比SIFT)第七步:结果保存显示结果窗口打印关键信息在命令行输出详细的检测结果保存结果图像等待按键关闭窗口2.示例5-4:ORB

特征检测(对比SIFT)如图5-4所示窗口显示绿色ORB关键点,数量接近500个(指定的nfeatures),分布均匀;命令行输出描述子形状为(N,32),维度远低于SIFT,证明ORB的高效性。运行结果拓展阅读ORB特征检测在我国工业领域开枝散叶在特征检测算法的演进中,既藏着技术迭代的智慧,更彰显着自主创新的担当。早期SIFT算法受限于专利壁垒,其商业应用需支付高昂授权费用,一度成为智能装备制造领域的“卡脖子”隐患。而ORB算法虽由国外团队于2011年提出并开源,但其原始版本在工业级场景中仍存在实时性不足、鲁棒性有限等工程化短板,且核心优化技术的话语权长期掌握在国外机构手中。我国科研团队并未止步于简单应用开源算法,而是以“啃硬骨头”的韧劲开展二次创新,通过算法重构与技术突破,构建起完全自主的知识产权体系,实现了从“可用”到“好用”再到“安全可控”的跨越。我国团队的突破首先聚焦于算法核心性能的自主升级,针对原始ORB的固有缺陷实现技术攻坚。山东大学团队发现,传统ORB算法在光照剧烈变化的工业车间中易出现特征点误匹配,导致AGV机器人定位漂移。为此,团队创新性地引入四叉树深度划分技术,将特征点邻域按层次拆解为多维度描述元素,通过“低深度优先匹配”机制构建新型二进制描述子,不仅将光照变化场景下的匹配精度提升37%,更从算法逻辑层面形成了差异化创新。拓展阅读ORB特征检测在我国工业领域开枝散叶上海科技大学则瞄准硬件适配的痛点,原始ORB在嵌入式设备中难以兼顾速度与精度,团队研发出基于流处理的非阻塞式硬件架构,通过精准控制rBRIEF描述子的计算窗口缓冲,配合嵌入式计数排序模块,在FPGA芯片上实现了特征提取速度的10倍提升,且未降低ORB-SLAM系统的定位精度,这项创新获得了国家发明专利授权,成为工业级视觉设备的核心技术支撑。拓展阅读ORB特征检测在我国工业领域开枝散叶在场景化适配与知识产权构建层面,我国团队走出了“算法-场景-专利”的协同创新路径。余姚耀达电子针对手机屏幕保护膜的智能定位需求,发现原始ORB会提取大量无效特征点导致定位延迟。团队通过引入“特征独特性评分”机制,结合像素梯度与邻域强度双重指标筛选关键特征点,将定位误差从0.3毫米缩减至0.05毫米,该技术方案已获国家发明专利(CN119359814A),成功应用于华为、小米的供应链生产线。更具代表性的是,国内团队针对ORB算法的尺度不变性短板,自主研发多尺度金字塔构建模块,通过动态调整缩放因子与金字塔层数,解决了原始ORB在大尺寸工件检测中“特征丢失”的问题,相关技术已形成12项核心专利,构建起抵御技术风险的知识产权屏障。拓展阅读ORB特征检测在我国工业领域开枝散叶这种创新实践绝非简单的技术改良,而是对“自主可控”理念的深刻践行。在智能装备制造领域,上海微创等企业采用国产改进型ORB算法构建视觉导航系统,替代了曾依赖的SIFT商业授权方案,仅专利授权费用每年即可节省数千万元;在物流仓储场景,基于国产ORB算法的SLAM系统将定位鲁棒率从国外方案的60%提升至92%,彻底解决了“重复货架导致的算法迷路”问题。这些突破背后,是科研人员数百次调整特征点筛选阈值的严谨,是工程师在零下20℃的冷链仓库中反复测试算法稳定性的坚守,更是新时代工匠精神的生动诠释。拓展阅读ORB特征检测在我国工业领域开枝散叶正如职业教育“岗课赛证”融合培养模式所倡导的,技术学习不仅要对标岗位标准,更要锤炼精益求精的专业素养。在后续的实践训练中,同学们需牢记:山东大学团队为优化描述子精度所做的300组对比实验,上海科技大学为调试硬件架构写下的上万行测试代码,都印证了同一个道理——特征点的定位精度影响系统可靠性,数据标注的严谨态度关乎技术伦理,每一行代码的优化都承载着职业责任,这正是“技能成才、匠心筑梦”的题中之义。5.3特征匹配特征匹配是“找到两幅图像中对应的特征点”;通过对比特征描述子的相似度,如欧氏距离,将第一幅图的特征点与第二幅图的特征点关联,是图像拼接、目标识别的核心步骤;OpenCV提供两种常用匹配方法:暴力匹配(Brute-Force)和

FLANN匹配。暴力匹配(Brute-ForceMatcher)5.3.1暴力匹配原理是“穷举搜索”:对第一幅图的每个特征点,计算它与第二幅图所有特征点的描述子距离,选择距离最小的作为匹配对,距离越小,相似度越高。适合特征点数量少的场景,如<1000个,简单直观。1.核心函数:cv2.BFMatcher()crossCheck:是否交叉验证,设为True时,仅保留“双向匹配”的对,减少误匹配,推荐开启;normType:距离计算方式,ORB用cv2.NORM_HAMMING,SIFT用cv2.NORM_L2;语法:matcher=cv2.BFMatcher(normType,crossCheck)匹配方法:matcher.match(queryDescriptors,trainDescriptors),返回匹配对列表。同一物体的两张不同角度图像,实现ORB特征匹配:1.新建一个Python文件;2.导入必要的库;OpenCV核心库处理数组2.示例5-5:ORB特征暴力匹配:第一步:读取图像+灰度转换第一块是读图判断确保图像读取成功读彩色图关键步骤为什么要转灰度?ORB特征检测在灰度图像上效果更好,计算效率更高。2.示例5-5:ORB特征暴力匹配:第二步:ORB特征检测创建检测器"nfeatures=500"限制最大特征点数量检测特征平衡检测效果和计算效率分别获取两张图的关键点和描述子2.示例5-5:ORB特征暴力匹配:

第三步:初始化暴力匹配器创建检测器创建匹配器"nfeatures=500"限制最大特征点数量检测特征平衡检测效果和计算效率分别获取两张图的关键点和描述子ORB描述子的标准距离度量开启交叉验证,确保匹配的唯一性2.示例5-5:ORB特征暴力匹配:第四步:执行匹配与排序执行匹配按匹配距离从小到大排序,距离越小匹配质量越高匹配排序分别获取两张图的关键点和描述子2.示例5-5:ORB特征暴力匹配:第五步:绘制最优匹配调用drawMatches只绘制前30个最优匹配不绘制单独关键点,只绘制匹配连线2.示例5-5:ORB特征暴力匹配:第六步:添加标注与信息输出添加标注在命令行输出匹配统计用红色文字标注匹配信息2.示例5-5:ORB特征暴力匹配:第七步:结果显示与保存等待按键显示结果窗口保存结果图像关闭窗口2.示例5-5:ORB特征暴力匹配:运行结果如图5-5所示,窗口显示左右拼接的两张杯子图,中间用绿色线条连接匹配的特征点,线条均匀分布在杯子区域,即便在相对复杂的场景中,也能做到大部分匹配正确。图5-5

ORB特征暴力匹配FLANN匹配(FastLibraryforApproximateNearestNeighbors)5.3.2FLANN是“近似最近邻匹配”,相比暴力匹配,它通过优化搜索算法如KD树、优先级队列,在特征点数量多时,如>1000个时速度更快,但精度略低,适合大规模特征匹配。1.核心配置FLANN需要指定两个参数:index_params:索引参数,ORB用algorithm=6,对应KD树算法;1.search_params:搜索参数,checks=50,检查的邻域数量,值越大精度越高,速度越慢。2.同一幅图像的缩放版本,对比两种匹配方法的效率:OpenCV核心库处理数值数组时间统计2.示例5-6:FLANN

匹配

vs

暴力匹配对比第一步:读取图像对+格式准备2.示例5-6:FLANN

匹配

vs

暴力匹配对比第二步:ORB特征检测为什么设这么多?为了突出FLANN在大规模特征匹配中的速度优势。2.示例5-6:FLANN

匹配

vs

暴力匹配对比

第三步:暴力匹配实现(基准方法)记录匹配开始时间适用于ORB特征的距离度量启用交叉验证,提高匹配质量按匹配距离排序,距离越小匹配越好计算暴力匹配总耗时2.示例5-6:FLANN

匹配

vs

暴力匹配对比第四步:FLANN匹配实现(高效方法)开始计时ORB特征优化的参数设置设置搜索邻域数量创建FLANN匹配器为什么用k=2?为了后续进行RatioTest筛选只保留质量高的匹配对计算FLANN匹配总耗时2.示例5-6:FLANN

匹配

vs

暴力匹配对比第五步:匹配结果可视化绘制暴力匹配结果绘制FLANN匹配结果2.示例5-6:FLANN

匹配

vs

暴力匹配对比第六步:添加性能标注为暴力匹配图添加标注为FLANN匹配图添加标注2.示例5-6:FLANN

匹配

vs

暴力匹配对比第七步:结果显示与性能输出2.示例5-6:FLANN

匹配

vs

暴力匹配对比第七步:结果显示与性能输出输出两种方法的匹配对数量和耗时,以及速度倍数关系。2.示例5-6:FLANN

匹配

vs

暴力匹配对比运行结果左窗口为暴力匹配(红色文字,耗时较长),右窗口为FLANN匹配(绿色文字,耗时短);命令行显示FLANN速度是暴力匹配的3-5倍,特征点越多,差距越明显,且匹配质量接近。如图5-6所示图5-6FLANN匹配vs暴力匹配任务实践任务实践任务一

简单图像拼接:基于ORB特征匹配1.准备两张有30%以上重叠区域的风景图,如“mountain1.jpg”“mountain2.jpg”;2.步骤:

用ORB检测两张图的特征点和描述子;

暴力匹配并筛选最优匹配对,取前50个;

从匹配对中提取对应点坐标,计算单应性矩阵(cv2.findHomography());

用cv2.warpPerspective()将图2映射到图1的坐标系;拼接两张图,将图1与映射后的图2合并;3.显示拼接前后的对比图,保存全景图为“panorama.jpg”。任务实践任务二

目标识别:基于ORB特征匹配1.准备“目标图”,如单独的杯子图“cup_target.jpg”和“场景图”,含杯子的复杂场景图“scene.jpg”(素材库中已为读者准备,但也可自备);分别检测两张图的ORB特征;暴力匹配并筛选好的匹配对;若匹配对数>20,判定场景图中包含目标,用矩形框标记目标位置;3.显示标记结果,保存为“target_detection.jpg”。2.步骤:拓展实训实训1:

Harris与Shi-Tomasi角点检测对比1.掌握两种角点检测算法的参数调整方法;1.2.分析不同参数,如Harris的k值、Shi-Tomasi的qualityLevel对检测结果的影响;2.3.总结两种算法的适用场景,如密集角点vs稀疏角点。3.实训目标选择3幅不同类型的图像——棋盘格(密集角点)、书架(中等密度)、单人照(稀疏角点),分别命名为“chessboard.jpg”“bookshelf.jpg”“lena.jpg”素材方面实训准备cv2.cornerHarris()、cv2.goodFeaturesToTrack()。核心技术实训1:

Harris与Shi-Tomasi角点检测对比分别用Harris(3组k值:0.02、0.04、0.06)和Shi-Tomasi(3组qualityLevel:0.01、0.05、0.1)检测,对比角点数量和分布。步骤1:实训设计思路对每幅图像:实训1:

Harris与Shi-Tomasi角点检测对比导入两个必要的库创建“exp1_corner_compare.py”OpenCV核心库处理数组步骤2:编写实训代码实训1:

Harris与Shi-Tomasi角点检测对比第一步:定义检测函数(代码复用关键)实训1:

Harris与Shi-Tomasi角点检测对比第一步:定义检测函数(代码复用关键)实训1:

Harris与Shi-Tomasi角点检测对比第一步:定义检测函数(代码复用关键)实训1:

Harris与Shi-Tomasi角点检测对比第二步:读取图像+格式检查创建图像路径列表为什么选这三幅?实训1:

Harris与Shi-Tomasi角点检测对比第二步:读取图像+格式检查chessboard.jpgbookshelf.jpglena.jpg因为它们代表不同角点密度场景,便于全面对比;实训1:

Harris与Shi-Tomasi角点检测对比第二步:读取图像+格式检查创建图像路径列表为什么选这三幅?循环读取图像加判断确保读取成功读取灰度图实训1:

Harris与Shi-Tomasi角点检测对比第三步:多参数对比检测(实验核心)对每幅图像进行Harris三组参数检测k=0.02(敏感)k=0.04(适中)k=0.06(严格)对每幅图像进行Shi-Tomasi三组参数检测qualityLevel=0.01(宽松)0.05(适中)0.1(严格)实训1:

Harris与Shi-Tomasi角点检测对比实训一第四步:结果标注与统计第五步:多图拼接显示拼接Harris三个参数结果拼接Shi-Tomasi三个参数结果形成2行3列的对比图为什么这样拼接?可以直观对比同一算法不同参数的效果,以及不同算法在同一参数下的差异。实训1:

Harris与Shi-Tomasi角点检测对比第六步:结果显示与保存显示对比窗口保存结果图像为每幅图像生成独立的对比图实训1:

Harris与Shi-Tomasi角点检测对比

1.运行代码:执行pythonexp1_corner_compare.py;

3.记录数据:将每幅图像的角点数量填入表格,总结参数规律。

2.观察结果:Harris角点:k值越小,检测到的角点越多(k=0.02时最密集,k=0.06时最稀疏);Shi-Tomasi角点:qualityLevel越小,角点越多(0.01时密集,0.1时稀疏);适用场景:棋盘格(密集角点)适合Harris,书架(中等密度角点)和单人照(稀疏角点)适合

Shi-Tomasi;运行与验证实训1:

Harris与Shi-Tomasi角点检测对比实训结果与分析Harris参数k:k是角点响应值的系数,k越小,对“疑似角点”的判定越宽松,角点数量越多;但k过小会导致误检,如平面区域的微小噪声被误判为角点,推荐k=0.04;Shi-Tomasi参数qualityLevel:值越小,允许的“低质量角点”越多,数量越多;值越大,仅保留高质量角点,分布更均匀,推荐qualityLevel=0.05;实训1:

Harris与Shi-Tomasi角点检测对比图5-7

实训结果:如图5-7所示,为棋盘格图像的角点对比结果;实训1:

Harris与Shi-Tomasi角点检测对比图

5-8、5-9书架、单人照角点检测对比实训(HarrisvsShi-Tomasi)实训结果:如图5-8、5-9所示,为书架、单人照角点检测对比结果。实训1:

Harris与Shi-Tomasi角点检测对比实训2:

ORB特征匹配与图像拼接掌握“特征匹配→单应性矩阵→图像拼接”的完整流程;1.理解单应性矩阵在图像映射中的作用;2.实现两张重叠图像的简单拼接,为全景图制作打下基础。3.实训目标拍摄两张有50%重叠的风景图,如从左到右拍摄同一场景,命名为“scene_left.jpg”“scene_right.jpg”;素材方面实训准备ORB特征检测、暴力匹配、单应性矩阵(cv2.findHomography())、图像映射(cv2.warpPerspective())。核心技术实训2:

ORB特征匹配与图像拼接步骤1:实训流程梳理1.检测两张图的ORB特征;2.暴力匹配并筛选好的匹配对,即Ratio测试;3.用匹配对计算单应性矩阵,需传入对应点坐标和RANSAC算法去除外点;4.将右图映射到左图坐标系;5.合并左图和映射后的右图,得到拼接图。实训2:

ORB特征匹配与图像拼接导入两个必要的库创建“exp2_orb_stitching.py”OpenCV核心库处理数组步骤2:编写实训代码实训2:

ORB特征匹配与图像拼接img_left=cv2.imread("scene_left.jpg",cv2.IMREAD_COLOR)第一步:读取图像+灰度转换读左图读右图实训2:

ORB特征匹配与图像拼接img_left=cv2.imread("scene_left.jpg",cv2.IMREAD_COLOR)第一步:读取图像+灰度转换分别读取左右两张图像scene_left.jpgscene_right.jpg实训2:

ORB特征匹配与图像拼接img_left=cv2.imread("scene_left.jpg",cv2.IMREAD_COLOR)第一步:读取图像+灰度转换读左图读右图加判断确保两张图像都读取成功关键步骤为什么要转灰度?因为ORB特征检测在灰度图上效果更好,计算速度更快。实训2:

ORB特征匹配与图像拼接img_left=cv2.imread("scene_left.jpg",cv2.IMREAD_COLOR)第二步:ORB特征检测创建ORB检测器检测关键点和描述子设置检测1000个特征点,保证有足够的匹配点;为两张图像分别提取特征实训2:

ORB特征匹配与图像拼接img_left=cv2.imread("scene_left.jpg",cv2.IMREAD_COLOR)第三步:暴力匹配与筛选创建匹配器执行K近邻匹配适用于ORB特征的距离度量为什么用k=2?为了后续进行RatioTest筛选;RatioTest筛选只保留质量高的匹配对,减少误匹配。实训2:

ORB特征匹配与图像拼接img_left=cv2.imread("scene_left.jpg",cv2.IMREAD_COLOR)第四步:匹配结果可视化绘制匹配结果添加标注只显示前50个最佳匹配用红色文字标注实训2:

ORB特征匹配与图像拼接img_left=cv2.imread("scene_left.jpg",cv2.IMREAD_COLOR)第五步:计算单应性矩阵(核心变换)提取对应点坐标为什么要reshape?因为findHomography函数需要特定格式的输入;计算单应性矩阵使用随机抽样一致性算法去除外点重投影误差阈值实训2:

ORB特征匹配与图像拼接img_left=cv2.imread("scene_left.jpg",cv2.IMREAD_COLOR)第六步:图像映射与拼接实训2:

ORB特征匹配与图像拼接img_left=cv2.imread("scene_left.jpg",cv2.IMREAD_COLOR)第六步:图像映射与拼接实训2:

ORB特征匹配与图像拼接img_left=cv2.imread("scene_left.jpg",cv2.IMREAD_COLOR)第七步:结果显示与保存添加最终标注用绿色文字标注保存结果图像scene_panorama.jpgscene_matches.jpg实训2:

ORB特征匹配与图像拼接

1.运行代码:执行pythonexp2_orb_stitching.py;

3.异常处理:若拼接错位,检查两张图的重叠区域是否足够,需>30%,或调整Ratio测试阈值,如改为0.8。

2.验证结果:匹配窗口:两张图的重叠区域有均匀的绿色匹配线,无明显错误;全景窗口:左图与映射后的右图无缝拼接,重叠区域无明显错位;运行与验证实训2:

ORB特征匹配与图像拼接实训结果与分析1.单应性矩阵:描述了右图到左图的“投影变换关系”,是图像映射的核心,cv2.findHomography()的RANSAC算法能去除错误匹配(外点),提高映射精度;拼接关键:全景图的宽度需足够大,确保映射后的右图能完整显示;合并时需避免右图的黑色背景覆盖左图;实训结果:如图5-8所示,上方为ORB匹配结果,下方为拼接后的全景图,标注“重叠区域匹配均匀”和“无缝拼接”,效果非常好。图

5-10ORB特征匹配与图像拼接实训2:

ORB特征匹配与图像拼接本章小结本章小结本模块围绕“特征检测与匹配”展开,核心解决“跨图像目标关联”问题,为目标识别、图像拼接等任务提供技术支撑。

从基础角点检测切入:Harris角点检测通过灰度变化矩阵识别关键区域;Shi-Tomasi算法则优化响应值计算,可控制角点数量且分布更均匀;两者适用于不同密度的角点提取场景;进而过渡到尺度不变特征。本章小结SIFT虽能跨尺度、角度稳定检测,但受专利限制且描述子维度高,ORB

则开源免费、速度快(比SIFT快10倍以上)、描述子仅32维,成为实际项目的首选。

在特征匹配环节:暴力匹配通过穷举搜索适合特征点少的场景,FLANN借助优化算法在大规模特征匹配中更高效,两者结合单应性矩阵可实现图像拼接等应用。本模块以OpenCV函数为核心,既覆盖基础理论又聚焦实操,为后续复杂计算机视觉任务,如全景图制作、目标定位等场景奠定特征层面的技术基础。课后习题一、选择题课后习题1.以下关于角点的说法,正确的是(

)A.角点是图像中灰度无变化的区域B.角点在两个垂直方向上的灰度变化都剧烈C.边缘属于角点的一种D.平面区域的像素容易被误判为角点一、选择题课后习题2.OpenCV中,cv2.goodFeaturesToTrack()函数用于(

)A.Harris角点检测B.Shi-Tomasi角点检测C.SIFT特征检测D.ORB特征检测一、选择题课后习题3.下列特征算法中,免费无专利限制的是(

)A.SIFTB.SURFC.ORBD.以上都是一、选择题课后习题4.特征匹配中,暴力匹配(BFMatcher)的核心原理是(

)A.近似最近邻搜索B.穷举所有特征点的距离C.基于KD树的优化搜索D.只匹配前10个特征点一、选择题课后习题5.图像拼接中,单应性矩阵的作用是(

)A.检测图像的特征点B.计算特征描述子C.将一幅图像的坐标映射到另一幅图像D.筛选最优匹配对二、填空题课后习题1.Harris角点检测中,cv2.cornerHarris()的k参数是__________系数,通常取值范围为__________,值越小检测到的角点越__________。2.ORB特征的描述子维度是__________维,比SIFT的__________维更简洁,匹配效率更高。3.FLANN匹配中,checks参数表示__________,值越大匹配精度越__________,但速度越慢。4.计算单应性矩阵时,cv2.findHomography()的method参数设为cv2.RANSAC,目的是__________,提高矩阵精度。三、操作题课后习题编写代码,实现“Harris角点检测参数调试”:(1).读取“chessboard.jpg”棋盘格图像;(2).用3组不同的k值(0.02、0.04、0.06)进行Harris角点检测;(3).统计每组k值对应的角点数量,在图像上标注“k值+角点数量”;(4).拼接3组结果图,显示对比,保存为“harris_param_tune.jpg”;(5).打印每组的角点数量,总结k值对检测结果的影响。三、操作题课后习题2.编写代码,实现“ORB特征匹配与目标标记”:(1).读取“target.jpg”(如单独的苹果)和“scene.jpg”(含苹果的场景);(2).分别检测两张图的ORB特征,暴力匹配并筛选好的匹配对(Ratio测试0.75);(3).若匹配对数>30,从匹配对中提取场景图的目标坐标,用矩形框标记;(4).显示“匹配结果图”和“带标记的场景图”,保存标记图为“target_marked.jpg”。计算机视觉应用第6章

目标检测基础目录CONTENT6.1Haar级联分类器基础016.2静态图像人脸检测026.3人脸+眼睛联合检测036.4实时摄像头目标检测046.5检测参数调优技巧05任务实践06本章小结08拓展实训07课后习题09手机拍照的“人脸对焦”“目标检测”是比“特征提取”更贴近实际需求的技术它不仅要识别图像中有什么目标,还要确定目标在图像中的位置并标记。门禁系统的“人脸验证”监控摄像头的“行人检测”引言引言轻量、实时性好,能快速实现人脸、眼睛、微笑等常见目标的检测;基于预训练模型(无需自己训练)Haar级联分类器是最适合的目标检测工具通过“静态图像检测→多目标联合检测→实时摄像头检测”三个递进的例子,掌握目标检测的核心流程,为后续复杂目标检测,如车牌、物体等,打下基础。从Haar级联分类器的基础原理入手工作情境“让机器找目标”工作情境门禁系统要检测人脸开门零售货架要查商品是否缺位生产线要挑出不合格零件从静态图的人脸检测入手,再做到实时摄像头的目标跟踪,还会教你调参数解决“漏检、误检”的小问题;做门禁项目时,你能用它快速实现人脸验证;查货架时,能让机器提醒“哪件商品没摆好”。比如这些技能上手快、用得上,是应对很多视觉岗位需求的“实用利器”。Haar级联分类器就是实现这些需求的“轻量工具”——不用复杂计算,就能快速定位图像里的目标。工作情境长三角智能制造产业园正是我国制造业向“智能制造”转型中不可或缺的基础工具。Haar级联分类器所支撑的目标检测技术工作情境不少企业用基于该技术的视觉检测设备替代人工质检,不仅将零件缺陷识别率提升至99.2%,更让一线工人从重复枯燥的分拣工作中解放出来,转向更具技术含量的设备调试与维护岗位。“新质生产力”发展技术赋能产业技能改变职业的生动体现掌握这类“接地气”的实用技术,既要对标岗位标准练硬本领,更要以“工匠精神”打磨每一次参数调优、每一段检测代码,未来才能在智能装备制造、智慧物流等领域,为我国产业升级贡献“精准识别”的技术力量。学习目标知识目标3.了解静态图像检测与实时摄像头检测的差异,掌握ROI(感兴趣区域)提取的原理与应用场景。2.掌握目标检测的核心流程(加载模型→灰度化→检测目标→绘制结果),明确detectMultiScale函数关键参数(scaleFactor、minNeighbors等)的作用。1.理解Haar级联分类器的核心原理,熟悉OpenCV内置预训练模型(人脸、眼睛等)的类型与适用场景。能力目标3.能够编写实时摄像头目标检测程序,实现帧读取、实时检测、按键退出等功能,并完成资源释放。2.能够调试detectMultiScale参数,解决目标检测中的漏检、误检问题,适配不同场景需求。1.能够独立加载预训练模型,实现静态图像中单人/多人脸检测、人脸+眼睛联合检测,并正确绘制标注框与文字。素养目标3.培养问题导向的思维方式,在应对漏检、误检等问题时,能够有条理地分析原因并找到解决方案,提升技术应用能力。2.养成严谨的参数调优习惯和规范的代码编写风格,如添加功能注释、及时释放摄像头资源等,提升程序的可读性与鲁棒性。1.认识目标检测技术在智能制造、安防等领域的产业价值,增强对“技术赋能实体经济”的认同感,树立职业自信。6.1Haar级联分类器基础Haar级联分类器概述6.1.1核心原理通过大量正负样本训练,学习目标的特征规律比如人脸的特征是“眼睛区域比脸颊暗、嘴巴区域比额头暗”核心思想训练好的模型存储这些特征检测时通过对比图像区域是否符合特征判断是否为目标模型文件名检测目标适用场景haarcascade_frontalface_default.xml正面人脸人脸对焦、人脸验证haarcascade_eye.xml眼睛(需在人脸区域内)人脸+眼睛联合检测haarcascade_smile.xml微笑(需在人脸区域内)表情识别入门haarcascade_profileface.xml侧面人脸侧脸检测表6-1预训练Haar级联模型OpenCV已内置多个预训练的Haar级联模型,存放在haarcascades文件夹中,常用模型如表6-1所示,它们都无需自己训练,直接加载使用:核心原理核心函数与参数6.1.21.cv2.CascadeClassifier():加载预训练模型语法:classifier=cv2.CascadeClassifier(model_path)model_path:预训练模型文件的路径;返回值:classifier,级联分类器对象,用于后续检测。注意:若路径错误,classifier.empty()会返回True,需添加判断避免报错。2.classifier.detectMultiScale():检测目标语法:objects=classifier.detectMultiScale(image,scaleFactor,minNeighbors,minSize,maxSize)image:输入图像,必须是灰度图,级联分类器仅支持单通道;scaleFactor:图像缩放因子,通常取1.1~1.3,表示每次检测时图像缩小的比例,如1.1表示缩小10%,值越小检测越精细但速度越慢;minNeighbors:邻居数阈值,通常取3~5,表示一个目标周围需要有多少个“候选框”才认定为真实目标,值越大误检越少但漏检越多;minSize:目标最小尺寸,如(30,30),小于该尺寸的区域不检测,避免小噪声;maxSize:目标最大尺寸,如(300,300),大于该尺寸的区域不检测,避免无关大区域;返回值:objects,目标坐标列表,每个元素是(x,y,w,h),表示目标的左上角x、y坐标,宽度w、高度h。模型路径获取6.1.3Windows:通常在Python安装路径\Lib\site-packages\cv2\data\下;1.macOS/Linux:通常在/usr/local/lib/pythonX.X/site-packages/cv2/data/或~/anaconda3/lib/pythonX.X/site-packages/cv2/data/(conda环境);2.验证:打开该文件夹,确认存在haarcascade_frontalface_default.xml等文件。3.模型路径获取OpenCV安装后,haarcascades文件夹的路径可通过以下方式获取:6.2静态图像人脸检测静态图像检测是目标检测学习的基础环节,其核心价值在于能以低复杂度、高可视化的方式帮助初学者建立“目标定位与识别”的核心认知——相较于实时摄像头检测的动态帧处理、多目标联合检测的区域关联逻辑,静态图像检测无需应对帧速率波动、目标遮挡等复杂问题,可聚焦于“模型加载→图像预处理→目标检测→结果可视化”的核心流程拆解,是理解Haar级联分类器工作原理的最佳入门场景。静态图像检测的这一完整流程,并非简单的步骤叠加,而是对Haar级联分类器应用逻辑的精准拆解,更深度承载了目标检测的核心思路——依托预训练模型挖掘目标核心特征,通过参数优化平衡检测精度与运算效率,借助可视化呈现直观验证检测效果。对于初学者而言,掌握这一基础流程,不仅能快速熟悉分类器的全链路操作逻辑,更能建立起“目标识别-特征提取-结果验证”的核心认知,为后续突破学习难点、实现知识迁移奠定坚实基础,这也正是静态图像检测作为入门基础的核心意义所在。初学者在熟练掌握后,能够轻松实现知识迁移:在“人脸+眼睛联合检测”中,可基于人脸检测结果提取感兴趣区域(ROI),进而在该区域内精准执行眼睛检测;在“实时摄像头检测”中,只需将静态图像读取环节替换为循环读取摄像头帧,即可完成从静态到动态检测的过渡。可见,以“单人正面人脸检测”为核心的静态图像检测,是搭建目标检测知识体系、打通“基础操作→复杂应用”学习路径的关键枢纽,为后续进阶学习提供了清晰的思路指引。静态图像人脸检测例6-1:检测静态图像中的正面人脸,并绘制矩形框导入必要的库OpenCV核心库第一步:加载模型+错误检查静态图像人脸检测第二步:读取图像+格式验证读取测试图像确保图像读取成功,避免后续处理出错。读彩色图判断lena.jpg静态图像人脸检测

第三步:图像预处理(灰度转换)做灰度转换预处理是关键,直接影响检测效果。为什么转灰度?因为彩色图有3个通道(BGR),灰度图只有1个通道,能大幅减少计算量,而且Haar特征是基于亮度差异计算的,灰度图更合适。静态图像人脸检测

第四步:人脸检测核心表示每个候选矩形需要5个邻居才确认为人脸,值越大误检越少但可能漏检;用detectMultiScale方法进行检测设置最小检测尺寸,避免检测到太小的噪声点。每次图像缩放缩小10%,值越小检测越精细但速度越慢;静态图像人脸检测

第五步:结果处理与可视化静态图像人脸检测

第五步:结果处理与可视化静态图像人脸检测

第六步:显示与保存结果显示结果窗口保存结果图像等待按键关闭窗口face_detection_result.jpg静态图像人脸检测运行结果与解析运行结果:如图6-1所示,正面人脸被绿色矩形框标记,文字标注清晰若未检测到:命令行输出“未检测到人脸”可尝试调整scaleFactor为1.05(更精细)或minNeighbors为3(更少严格)若检测成功:窗口显示原图像,人脸周围有绿色矩形框,上方标注“Face”命令行输出“检测到1个人脸”图6-1静态图像人脸检测结果6.3人脸+眼睛联合检测在人脸检测的基础上,仅在“人脸区域内”检测眼睛,避免在非人脸区域(如背景)找眼睛,提高效率和准确性,更贴近实际应用人脸+眼睛联合检测导入两个必要的库导入必要的库OpenCV核心库例6-2:检测静态图像中的人脸,并在人脸区域内检测眼睛第一步:加载双模型+错误检查人脸+眼睛联合检测第一步:加载双模型+错误检查人脸+眼睛联合检测第二步:读取图像+灰度转换读取测试图像读彩色图确保图像读取成功判断lena.jpg做灰度转换为什么转灰度?因为级联分类器基于Haar特征,灰度图计算量小,检测速度更快。人脸+眼睛联合检测第三步:人脸检测(一级检测)人脸+眼睛联合检测第三步:人脸检测(一级检测)人脸+眼睛联合检测

第四步:ROI提取与眼睛检测(二级检测)人脸+眼睛联合检测

第四步:ROI提取与眼睛检测(二级检测)人脸+眼睛联合检测先绘制人脸框第五步:分层绘制与坐标转换绿色框线宽2;再添加"Face"文字标注。人脸+眼睛联合检测第五步:分层绘制与坐标转换人脸+眼睛联合检测第六步:结果显示与保存显示结果窗口保存结果图像等待按键关闭窗口人脸+眼睛联合检测运行结果与解析运行结果:如图6-2所示,人物面部有绿色人脸框,双眼位置有蓝色眼睛框及标注关键技巧:眼睛检测限制在人脸ROI内,避免在背景,如墙壁、头发中误检“类似眼睛的区域”检测成功:窗口显示人脸(绿色框)和眼睛(蓝色小框),命令行输出人脸和眼睛数量图6-2人脸+眼睛联合检测结果6.4实时摄像头目标检测实时检测是目标检测的重要应用场景,如视频监控、直播美颜,基于cv2.VideoCapture实现,流程为“打开摄像头→循环读帧→检测→显示→退出”实时摄像头目标检测导入两个必要的库导入必要的库OpenCV核心库例6-3:实时摄像头检测正面人脸,显示在窗口中第一步:加载模型+错误检查判断加载模型使用标准的人脸检测模型怕模型文件不存在,能及时提示"模型加载失败",确保后续检测可靠。实时摄像头目标检测

第二步:打开摄像头+连接验证初始化摄像头"0"表示默认摄像头,如果是外接摄像头可以用"1";判断是怕摄像头被占用或驱动问题,能及时提示"摄像头打开失败",实际部署中这种检查很重要。实时摄像头目标检测

第三步:实时循环处理实时检测的核心------持续读取和处理视频帧进入主循环读取每一帧ret判断是否读取成功,frame保存当前图像;如果notret就跳出循环,避免程序崩溃。实时摄像头目标检测

第四步:实时检测优化做灰度转换为什么转灰度?因为实时检测要求速度快,灰度图计算量小,能保证检测流畅性。做实时人脸检测限制最大尺寸,排除误检实时摄像头目标检测

第五步:实时绘制与显示遍历检测到的人脸绘制绿色检测框文字标注,标注实时状态实时摄像头目标检测

第六步:交互控制与资源释放显示实时画面等待1毫秒检测按键按q键退出设置退出机制关闭摄像头关闭窗口实时摄像头目标检测运行结果与解析注意事项:若摄像头画面卡顿,可增大scaleFactor(如1.3),减少检测精细度以提高速度退出方式:在摄像头窗口中按键盘的“q”键,程序释放摄像头并退出实时效果:打开摄像头窗口,镜头对准人脸时,会实时出现绿色矩形框及“Face(Real-time)”标注;图6-3实时摄像头人脸检测结果运行结果:如图6-3所示,摄像头窗口中显示实时画面,人脸被绿色矩形框标记,标注“Face(Real-time)”6.5检测参数调优技巧用户常遇到“漏检”(没检测到目标)或“误检”(把非目标当目标),核心是调整scaleFactor和minNeighbors两个参数,以下通过对比示例说明参数对比示例:体会如何调参例6-4:以“多人脸图像检测”为例,观察不同参数的效果差异OpenCV核心库1.新建一个Python文件2.先导入必要的库:第一步:加载模型+错误检查这里使用标准的人脸检测模型添加判断命令

确保模型加载成功,避免后续对比实验出错参数对比示例:体会如何调参第二步:读取图像+灰度转换读彩色图灰度图能提高检测速度参数对比示例:体会如何调参要在同一张图上进行不同参数的对比实验,保持原始图像一致。第三步:图像复制(对比实验准备)参数对比示例:体会如何调参第四步:参数组合对比(核心实验)很宽松,容易产生误检但漏检少参数对比示例:体会如何调参第四步:参数组合对比(核心实验)更精细平衡误检和漏检参数对比示例:体会如何调参第四步:参数组合对比(核心实验)检测速度快但容易漏检参数对比示例:体会如何调参很严格,误检少但容易漏检第四步:参数组合对比(核心实验)参数对比示例:体会如何调参每个窗口显示不同参数效果等待按键关闭所有窗口第五步:结果显示与对比参数对比示例:体会如何调参参数调优对比分析静态图像:优先保证精度,scaleFactor取1.05~1.1,minNeighbors取3~4误检时(多了假目标):增大minNeighbors(如从3→5),增大scaleFactor(如从1.1→1.2),增大minSize(如从30→50)漏检时(没找到目标):减小minNeighbors(如从5→3),减小scaleFactor(如从1.2→1.1),减小minSize(如从50→30)图6-4不同参数检测效果对比图运行结果:如图6-4所示,4个窗口对比不同参数的检测效果,第2幅图(适中)检测效果最优”。4个窗口分别显示:

宽松参数(易误检,少漏检);适中参数(平衡);快速参数(易漏检,少误检);严格参数(少误检,易漏检)实时场景:优先保证速度,scaleFactor取1.2~1.3,minNeighbors取4~5任务实践任务:静态图像人脸+眼睛联合检测素材准备模型准备:haarcascade_frontalface_default.xml(人脸模型)haarcascade_eye.xml(眼睛模型)图片准备:准备1张含清晰正面人脸的图像操作步骤用

cv2.CascadeClassifier()

分别加载人脸和眼睛模型,通过

classifier.empty()

判断模型是否加载成功;1.用

cv2.imread()

读取

lena.jpg,用

cv2.cvtColor()

将彩色图转为灰度图;2.调用

face_clf.detectMultiScale()

检测人脸,参数设置与课文一致:scaleFactor=1.1、minNeighbors=5、minSize=(30,30);3.若检测到人脸,提取人脸ROI,在ROI内调用

eye_clf.detectMultiScale()

检测眼睛,参数按课文设为

scaleFactor=1.1、minNeighbors=3、minSize=(15,15);4.任务:

静态图像人脸+眼睛联合检测结果处理按课文方式绘制标注:人脸用绿色矩形框标“Face”眼睛用蓝色矩形框标“Eye”保存:cv2.imwrite()

保存为

my_face_eye_detect.jpg;用

cv2.imshow()

显示结果验证要求确认检测结果与教材

6.4节示例一致若出现问题,对照课文6.6节参数调优技巧调整如漏检时减小

minNeighbors。“未检测到人脸/眼睛”“误检背景”无拓展实训静态图像多人脸检测与计数实训1实训目标掌握多人脸图像的检测方法;1.实现人脸数量统计,并在图像上显示人数;2.学会根据多人脸场景调整检测参

温馨提示

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

最新文档

评论

0/150

提交评论