计算机视觉技术应用项目化教程 课件 项目5 图像处理进阶_第1页
计算机视觉技术应用项目化教程 课件 项目5 图像处理进阶_第2页
计算机视觉技术应用项目化教程 课件 项目5 图像处理进阶_第3页
计算机视觉技术应用项目化教程 课件 项目5 图像处理进阶_第4页
计算机视觉技术应用项目化教程 课件 项目5 图像处理进阶_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

项目五:图像处理进阶交互、变换与增强技术COMPUTERVISION·计算机视觉系列课程任务导入:打造你的智能文档扫描助手😣现实痛点:拍照效果不尽如人意•文档倾斜:随手一拍,照片中的文档角度歪了,视觉效果差。•画质模糊:室内光线昏暗,导致文字暗淡,难以识别。•背景杂乱:桌面上杂物太多,只想提取文档的主体内容。🚀学习目标:打造智能扫描助手•自由框选:实现鼠标交互,在图片上精准框选出需要扫描的区域。•智能矫正:利用仿射变换算法,将倾斜的文档自动“扳正”对齐。•一键增强:应用直方图均衡化技术,提升文字对比度,让模糊变清晰。本章学习目标知识目标•理解核心概念掌握滚动条、鼠标交互、仿射变换、色彩空间(RGB,HSV)、直方图及直方图均衡化的基本原理。•熟悉函数功能了解OpenCV中关键函数如`cv2.createTrackbar`,`cv2.setMouseCallback`,`cv2.warpAffine`,`cv2.cvtColor`等的作用与参数含义。能力目标•交互设计:为图像处理程序添加滚动条和鼠标交互功能。•图像变换:运用仿射变换实现图像平移、缩放、旋转及透视矫正。•色彩处理:进行色彩空间转换,利用色彩信息实现特定目标检测。•图像增强:运用直方图均衡化技术有效提升图像整体对比度。素质目标•问题解决能力运用所学知识,分析并解决文档扫描、照片优化等生活中的实际图像处理问题。•编程与调试能力培养阅读、理解复杂逻辑代码,以及独立排查程序错误的能力。•创新思维尝试将交互、变换、增强等多种技术进行组合,开发具有创意的应用程序。第一部分:交互界面设计01.动态交互:滚动条的应用滚动条是OpenCV中实用的交互组件。它依附于窗口存在,用户可通过拖动滑块,直观地在设定范围内动态调整数值。这在调试图像处理参数(如二值化阈值、颜色通道值、对比度)时,比反复修改代码并重新运行高效得多。⚙️核心函数:•cv2.createTrackbar(name,winname,val,max,callback)-创建滚动条并绑定窗口•cv2.getTrackbarPos(name,winname)-获取当前滑块的数值🎯实战任务:打造一个RGB调色板实现思路:创建三个独立的滚动条,分别映射R、G、B颜色通道(0-255),并实时将三个通道的值混合,显示在画布上。RGB调色板运行效果示意

界面中包含三个独立的滚动条控件与一个颜色显示窗口。

拖动任意滑块,下方的颜色会实时响应并更新。RGB调色板代码实现#导入必要库|定义回调函数,响应滑块变化importcv2importnumpyasnpdefchangeColor(x):#获取滑块值并更新图像(OpenCV颜色通道顺序为BGR)r,g,b=[cv2.getTrackbarPos(c,'image')forcin('R','G','B')]img[:]=[b,g,r]#初始化画布与窗口|创建RGB三通道滑块img=np.zeros((128,512,3),np.uint8)dWindow('image')[cv2.createTrackbar(c,'image',0,255,changeColor)forcin('R','G','B')]#主循环显示|按下ESC(ASCII27)退出程序whileTrue:cv2.imshow('image',img)ifcv2.waitKey(1)&0xFF==27:breakcv2.destroyAllWindows()2.精准控制:鼠标交互的实现知识准备:如何与鼠标交互?OpenCV提供了`cv2.setMouseCallback()`函数来处理鼠标事件。当用户在指定窗口内进行鼠标操作(如点击、拖拽、释放)时,会触发一个预定义的回调函数,从而执行相应的操作逻辑。核心函数解析cv2.setMouseCallback(winname,onMouse)•winname:窗口名称|•onMouse:鼠标事件回调函数实战任务:鼠标截图工具综合运用鼠标事件监听与图像截取技术,实现一个功能完备的截图工具:

1.捕捉鼠标的“左键按下”与“鼠标释放”两个关键事件

2.在鼠标拖拽过程中实时绘制矩形框,显示框选范围

3.释放鼠标后,自动计算并截取该矩形区域,保存为独立图片文件。鼠标截图工具代码实现importcv2importnumpyasnp#定义全局变量,用于存储图像和鼠标点坐标globalimg,point1,point2#定义鼠标回调函数,处理三种核心事件defon_mouse(event,x,y,flags,param):globalimg,point1,point2img2=img.copy()#每次绘制前复制原图,避免在原图上叠加绘制ifevent==cv2.EVENT_LBUTTONDOWN:#1.鼠标左键按下,记录起点point1=(x,y);cv2.circle(img2,point1,8,(0,255,0),-1)elifevent==cv2.EVENT_MOUSEMOVEand(flags&cv2.EVENT_FLAG_LBUTTON):#2.拖拽,实时画框cv2.rectangle(img2,point1,(x,y),(255,0,0),2)elifevent==cv2.EVENT_LBUTTONUP:#3.鼠标释放,计算并截取区域point2=(x,y);min_x,min_y=min(point1[0],point2[0]),min(point1[1],point2[1])w,h=abs(point1[0]-point2[0]),abs(point1[1]-point2[1])cut_img=img[min_y:min_y+h,min_x:min_x+w];cv2.imwrite("cut_result.jpg",cut_img)第二部分:图像几何变换知识准备:什么是仿射变换?仿射变换(AffineTransformation)是一种二维坐标到二维坐标的线性变换。它能保持图像的“平直性”(直线变换后依然是直线)和“平行性”(平行线变换后依然是平行线)。在图像处理中,最常见的应用场景包含:平移、缩放、旋转和剪切。OpenCV核心函数:cv2.warpAffine函数原型:cv2.warpAffine(img,M,dsize)•img:输入的原始图像矩阵•dsize:输出图像的尺寸(宽,高)•M(关键):2x3的变换矩阵,决定最终变换效果四种常用变换与矩阵构造平移(Translation)M=[[1,0,tx],[0,1,ty]]缩放(Scaling)M=[[sx,0,0],[0,sy,0]]旋转(Rotation)M=cv2.getRotationMatrix2D(...)仿射/透视(Perspective)M=cv2.getAffineTransform(...)仿射变换代码实现#导入库与读取图像

importnumpyasnp;importcv2

img=cv2.imread("HappyFish.jpg");h,w=img.shape[:2]#1.平移:构造矩阵+应用变换

M_t=np.float32([[1,0,50],[0,1,30]])

img_t=cv2.warpAffine(img,M_t,(w,h))#2.缩放:缩小一半(手动构造矩阵)

M_s=np.float32([[0.5,0,0],[0,0.5,0]])

img_s=cv2.warpAffine(img,M_s,(w,h))#3.旋转与4.三点透视(函数生成矩阵)

M_r=cv2.getRotationMatrix2D((w/2,h/2),-60,0.8)

M_p=cv2.getAffineTransform(src_pts,dst_pts)平移(Translation)通过构造偏移矩阵,实现图像沿坐标轴移动。缩放(Scaling)调整矩阵系数改变宽高比,实现放大或缩小。旋转(Rotation)基于中心点和角度,调用函数生成旋转矩阵。三点透视(Perspective)指定三对映射点,自动计算并应用仿射变换。第三部分:色彩空间与应用知识准备为什么需要色彩空间?RGB是我们最熟悉的色彩空间,由红、绿、蓝三个颜色通道叠加而成。但是,RGB的三个颜色通道是高度相关的。在颜色识别、分割等图像处理任务中,直接使用RGB会很困难。将其转换为其他色彩空间(如HSV),往往能大幅简化算法设计。HSV色彩空间•H(Hue):色调——颜色的种类。•S(Saturation):饱和度——颜色鲜艳程度。•V(Value):亮度——颜色的明暗程度。💡优势:将颜色与亮度分离,非常适合颜色识别。OpenCV核心函数cv2.cvtColor(img,code)用于实现图像色彩空间的转换。其中第二个参数code决定转换类型。常用Code示例:

•cv2.COLOR_BGR2GRAY

•cv2.COLOR_BGR2HSV任务实现:实时肤色检测任务目标利用OpenCV库调用电脑摄像头实时获取视频流,将画面转换至HSV色彩空间,通过设定阈值提取肤色区域,最终将检测结果与原始画面进行并排对比展示。importcv2,numpyasnp

#1.打开默认摄像头,定义肤色Hue范围(7~40)

cap=cv2.VideoCapture(0);minH,maxH=7,40

#2.逐帧捕获与处理

whilecap.isOpened():

_,frame=cap.read()#读取帧

hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)#转HSV

mask=cv2.inRange(hsv[:,:,0],minH,maxH)#Hue通道二值化

cv2.imshow('Result',np.hstack((frame,cv2.bitwise_and(frame,frame,mask=mask))))

ifcv2.waitKey(1)==27:break#Esc键退出效果解析左侧为摄像头采集的原始画面,右侧为检测结果。

算法的核心在于利用了HSV颜色空间中Hue(色调)分量的稳定性。肤色在色调通道上有明显且集中的数值范围,我们据此创建掩码,从而精准过滤掉背景,仅保留人物的皮肤区域。第四部分:图像增强技术知识准备:什么是直方图均衡化?📊直方图的定义:是统计图像中每个灰度级出现次数的图表。如果一张图像的直方图集中在某个狭窄的灰度范围内,这通常意味着这张图像的对比度较低,画面看起来灰蒙蒙的。✨直方图均衡化(HistogramEqualization):这是一种通过“拉伸”图像的灰度值分布,使其更均匀地覆盖整个灰度范围的方法。这种操作能有效提升图像的全局对比度,让细节更加清晰可见。OpenCV核心实现函数cv2.equalizeHist(img)适用于整体光照比较均匀的图像,能快速实现全局对比度提升,但在光照不均的场景下容易丢失细节。cv2.createCLAHE(clipLimit,tileGridSize)自适应直方图均衡化(CLAHE)。将图像划分为小块并分别进行均衡化,能更好地保留图像的局部细节,效果通常优于全局均衡化。任务实现:提升低对比度图像的清晰度任务目标读取一张对比度较低的图像,分别使用普通直方图均衡化和自适应直方图均衡化(CLAHE)进行处理,并对比两者的视觉效果与细节保留能力。importcv2,numpyasnp#1.以灰度模式读取图像img=cv2.imread('low_contrast_img.png',0)#2.全局vs自适应(CLAHE)均衡化equ_global=cv2.equalizeHist(img)equ_clahe=cv2.createCLAHE(2.0,(8,8)).apply(img)#3.横向拼接显示结果进行对比cv2.imshow("Result",np.hstack((img,equ_global,equ_clahe)))处理效果对比💡关键发现:•普通直方图均衡化:虽然提升了整体对比度,但容易丢失局部细节,且可能造成过曝。•CLAHE自适应均衡化:将图像分块处理,能有效增强局部对比度,更好地保留纹理细节,视觉效果更自然。项目总结交互界面设计•滚动条(Trackbar):使用`cv2.createTrackbar()`动态调整参数,实时预览效果。•鼠标交互:通过`cv2.setMouseCallback()`实现区域选择、自定义绘图等交互。图像几何变换•仿射变换:核心是构造变换矩阵`M`,通过`cv2.warpAffine()`实现。•常用变换:掌握图像的平移、缩放、旋转及透视变换等操作。色彩空间与应用•模型与转换:理解RG

温馨提示

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

评论

0/150

提交评论