版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目一:搭建计算机视觉开发环境Anaconda·OpenCV·NumPy·Matplotlib环境配置指南COMPUTERVISION·计算机视觉系列课程任务导入:开启你的AI视觉之旅【教学场景导入】想象一下,你是一位人工智能工程师,需要开发自动识别零件的产线系统,或是打造一款能实时美化照片的App。这些激动人心的应用背后,都离不开一个强大的领域——计算机视觉(ComputerVision),它赋予了计算机“看懂”世界的眼睛。安防:人脸识别门禁交通:自动驾驶感知医疗:CT影像分析🎯本项目核心任务:工欲善其事,必先利其器。从零开始,一步步搭建一个完整、专业的计算机视觉Python开发环境。学习目标:知识、能力与素质知识目标01.理解核心概念
掌握计算机视觉的基本定义及其在现实世界中的广泛应用场景。02.认识开发工具
了解Anaconda作为Python包管理和环境管理工具的核心优势与价值。03.掌握环境原理
理解虚拟环境的重要性,以及它如何有效隔离不同项目间的依赖冲突。能力目标✓环境安装:独立完成Windows/macOS系统下Anaconda的下载与安装。✓环境配置:正确配置系统环境变量,确保命令行工具可全局调用。✓环境管理:熟练使用conda命令创建、激活、列出和删除虚拟环境。✓验证安装:使用conda/pip安装核心库,编写脚本并成功运行验证。素质目标🛡️严谨细致的作风
注重环境配置的每一步细节,主动培养排查和解决问题的能力。📋规范的开发习惯
建立“项目专属虚拟环境”的意识,养成良好的职业开发习惯。🔍自主探索精神
学会利用官方文档与网络资源,独立解决安装过程中的疑难杂症。知识准备:什么是计算机视觉?01/概念定义(Definition)计算机视觉(ComputerVision,CV)是一门研究如何使计算机能够“看”和“理解”图像和视频的科学。它是人工智能(AI)的一个重要分支,旨在让计算机具备像人类一样,从视觉输入中自动提取关键信息、精准识别对象并理解复杂场景的能力。💡一句话概括:让机器看懂世界连接数字世界与物理世界的关键感知桥梁02/核心任务体系(CoreTasks)图像获取利用摄像头、扫描仪等设备,捕捉真实世界的原始视觉数据。预处理去噪、增强对比度、统一尺寸等,提升图像质量。特征提取识别图像中的关键特征,如边缘、角点、纹理等。对象识别与分类判断图像中有什么物体,并进行分类(如猫、狗、车等)。场景理解分析物体间的空间关系与交互,理解整体环境的含义。知识准备:计算机视觉的应用领域医疗影像分析辅助医生进行疾病诊断,快速识别病灶,广泛应用于CT、MRI图像分析中。自动驾驶充当汽车的“眼睛”,实时识别道路、行人、交通标志与障碍物,保障行驶安全。人脸识别广泛应用于手机解锁、门禁安防、金融支付等场景,实现精准身份验证。工业检测在生产线上代替人工,以极高的效率和准确率自动检测产品外观缺陷或装配问题。无人机与机器人赋予机器“感知”能力,帮助机器人与无人机在复杂环境中实现自主导航与避障。AR/VR通过环境识别与实时追踪,将虚拟数字内容叠加在现实世界上,创造沉浸式体验。内容推荐社交平台和电商利用图像内容理解技术,为用户精准推荐感兴趣的视频、图片与商品。环境准备:为什么选择Anaconda?一站式解决方案Anaconda是数据科学与机器学习领域最受欢迎的开源Python发行版。它集成了包管理、环境隔离与科学计算库,完美解决了系统环境的混乱与冲突,让你从繁琐的配置中解放出来,专注于核心业务开发。⚠️直接使用Python的常见痛点版本冲突多项目库版本不一致,极易导致环境崩溃权限难题系统级安装常需管理员权限,限制开发自由度环境混乱依赖关系错综复杂,难以管理与追溯便捷包管理(Conda)强大的Conda工具自动分析并处理复杂的依赖关系。隔离虚拟环境项目环境相互独立,完美避免版本冲突。丰富预装库自带NumPy,Pandas等数百个科学计算包,开箱即用。全平台支持完美兼容Windows/macOS/Linux三大系统。动手实践(1):安装Anaconda(Windows)STEP01/下载安装包1.访问官网:/products/distribution2.根据你的操作系统,下载对应的安装程序。建议直接选择Python3.x系列的最新版本。STEP02/执行安装程序•双击.exe启动安装,一路点击Next,建议选择“JustMe”和默认路径。•关键:勾选“AddAnaconda3tomyPATHenvironmentvariable”,这是在终端使用conda的前提。•最后点击Install,等待几分钟即可完成。动手实践(1):安装Anaconda(macOS)STEP01下载Anaconda1.访问官网下载页面:/products/distribution2.找到并下载对应macOS系统的.pkg格式安装包。STEP02执行安装程序•双击下载的.pkg文件启动安装,按提示点击"Continue"。•选择安装方式为"Installformeonly"。•输入电脑用户密码并确认,点击"InstallSoftware"完成安装。STEP03配置终端环境变量1.打开「终端」,输入命令打开配置文件:
nano~/.zshrc(macOSCatalina+)或nano~/.bash_profile2.在文件末尾添加Anaconda路径,替换"你的用户名"后保存退出。3.执行source~/.zshrc使配置生效,完成。动手实践(2):验证Anaconda安装【目标】:确认Anaconda安装成功,且系统环境变量已正确配置,使conda命令能在全局命令行中直接调用。STEP1.打开命令行工具Windows系统快捷键Win+R→输入cmd→回车macOS/Linux系统启动台搜索并打开“终端”(Terminal)STEP2.检查Conda版本输入:conda--version→若显示版本号如“conda23.1.0”即为成功。STEP3.更新Conda(推荐)输入:condaupdateconda→提示确认时输入y并回车。STEP4.查看环境列表输入:condainfo--envs→列表中能看到默认的base环境。动手实践(3):创建与管理虚拟环境01.创建环境condacreate--name<环境名>python=3.9示例:创建名为cv-env的环境,隔离项目依赖,互不干扰。02.列出所有环境condaenvlist查看系统中所有已创建的虚拟环境列表,确认环境是否创建成功。03.激活环境condaactivatecv-env激活后命令行前会显示(cv-env),此时所有操作都在该环境内。04.退出环境condadeactivate完成当前项目开发或调试任务后,使用该命令退出虚拟环境,返回系统默认环境。05.删除环境condaremove--name<环境名>--all清理不再使用的虚拟环境,释放磁盘空间。删除前请先确认已退出该环境。动手实践(4):安装核心库【前提】确保你已经激活了虚拟环境:condaactivatecv-env01安装NumPyPython科学计算的基础库,为矩阵运算和数据处理提供核心支持。condainstallnumpy02安装OpenCV计算机视觉领域的核心库,支持图像读取、处理与特征分析。condainstall-cconda-forgeopencv03安装MatplotlibPython绘图库,用于图像的显示、结果可视化及数据图表绘制。condainstallmatplotlib【查看已安装的包】
安装完成后,在激活的cv-env环境中输入命令,可列出当前环境下所有包及版本号。condalist动手实践(5):验证开发环境【实践目标】编写简单的Python脚本,验证OpenCV、NumPy和Matplotlib库是否已正确安装并能协同工作。1.准备素材:准备一张测试图片(例如test.jpg)保存在脚本同目录。2.编写脚本:创建test_env.py,导入库并编写图片读取、格式转换和显示代码。3.运行脚本:激活cv-env环境,使用命令行运行:pythontest_env.py【预期结果】一个新的窗口会弹出,显示两张并排的图片:左侧是颜色失真的BGR格式图,右侧是色彩正确的RGB格式图。编写脚本代码使用代码编辑器创建脚本文件,导入所需库,读取图片并进行格式转换操作。结果验证窗口脚本运行后,Matplotlib弹出的结果窗口。对比左右两张图,确认环境配置正确且色彩空间转换正常。项目总结与常见问题核心步骤回顾01.安装Anaconda获取强大的Python包管理和环境管理工具,一站式解决环境配置难题。02.配置环境变量添加路径到系统环境变量,确保在任意终端都能直接调用conda命令。03.创建虚拟环境执行condacreate,为项目建立独立的“隔离舱”,避免包冲突。04.激活虚拟环境执行condaactivate,正式进入项目专属的独立工作环境。05.安装核心库使用condainstall安装OpenCV,NumPy,Matplotlib等必备库。06.编写验证脚本编写简单代码检验所有组件是否能协同工作,确保环境配置无误。关键conda命令速查创建环境condacreate--name<env_name>python=3.9列出环境condaenvlist激活环境condaactivate<env_name>退出环境condadeactivate安装包condainstall<pkg>常见问题与解决方案Q1:conda命令无法识别解决方案:检查Anaconda安装过程中是否勾选了“AddAnaconda3tomyPATHenvironmentvariable”选项;若未勾选,可手动将Anaconda的安装目录下的“Scripts”和“Library\bin”文件夹路径添加至系统环境变量。Q2:cv2.imread()返回None解决方案:这通常由路径错误引起。建议直接使用图片的绝对路径进行调试;或者将图片文件移动到当前运行的脚本文件同一目录下,使用相对路径读取,避免因转义字符或拼写错误导致的路径失效。Q3:Matplotlib显示图片颜色异常解决方案:这是OpenCV与Matplotlib的色彩通道顺序差异导致的。OpenCV读取的图像默认为BGR格式,而Matplotlib显示时期望的是RGB格式。在显示前执行转换即可:img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)。Q4:安装包时下载速度过慢解决方案:为conda配置国内的软件源,能显著提升下载速度。推荐配置清华大学开源软件镜像站的conda镜像源。可在AnacondaPrompt中运行相应的配置命令,或手动修改.condarc配置文件。Q&A感谢观看THANKYOUFORWATCHING项目二:操作图像文件基于OpenCV的图像处理入门COMPUTERVISION·计算机视觉系列课程任务导入:成为一名AI应用开发者场景设定:开发“智能相册”APP你是核心后端工程师,需要构建核心处理模块,解决以下难题:01.照片读取与显示用户上传照片后,App如何快速读取数据并渲染在界面上?02.图片智能编辑用户点击“一键黑白”,如何利用算法实时处理图片色彩?03.视频存储与管理录制视频产生的大量数据,App如何高效写入并管理文件?04.自动分类与清理自动识别并清理无效小文件,将照片按色彩属性分类存放。学习目标:掌握Python+OpenCV解决多媒体处理核心问题PROJECT:SMARTALBUMENGINEStartyourbackendjourney学习目标:知识、能力与素质知识目标◆理解核心概念:掌握数字图像在计算机中的表示方式(像素、Numpy数组)◆掌握核心函数:熟练运用OpenCV核心函数处理静态图像;理解并使用相关类处理动态视频。◆了解辅助模块:熟悉os和shutil模块在文件与目录操作中的应用。能力目标◆独立编程实现:编写程序完成图像的读取、显示、保存和简单交互;实现从摄像头捕获视频并保存。◆批量处理能力:能够编写脚本对指定目录下的图像文件进行批量筛选、删除和分类,提升工作效率。素质目标◆培养规范意识:养成良好的代码书写风格和规范的注释习惯,提升代码可读性。◆提升调试能力:学会分析并解决路径错误、文件格式不兼容等常见的开发问题。◆建立工程思维:能够将实际需求转化为可行的编程解决方案,培养解决问题的逻辑思维。第一部分:静态图像的读取、显示与存储▍核心函数概览:OpenCV图像处理基础链cv2.imread()·读取图像功能:从指定路径加载图像文件到内存,构建多维数组。关键参数:filepath(路径),flags(读取方式:彩色/灰度/原图)cv2.imshow()·显示图像功能:创建一个窗口并在其中渲染显示已加载的图像数组。关键参数:winname(窗口名),img(待显示的图像数组)cv2.waitKey()·等待交互功能:暂停程序,等待用户按键输入,决定程序下一步走向。关键参数:delay(等待毫秒数,0代表无限期等待)cv2.imwrite()·保存图像功能:将内存中处理后的图像数组,持久化写入磁盘文件。关键参数:filepath(保存路径),img(待写入的图像数组)💡标准流程:imread()(读取)→imshow()(显示)→waitKey()(等待交互)→imwrite()(保存)计算机视觉ComputerVision项目二:操作图像文件任务实现:读取并显示图像💻参考代码(Python+OpenCV)importcv2importos#拼接跨平台兼容的文件路径current_dir=os.path.dirname(os.path.abspath(__file__))img_path=os.path.join(current_dir,'cvpicture','HappyFish.jpg')#1.读取彩色图像img=cv2.imread(img_path,cv2.IMREAD_COLOR)#检查图像是否成功加载(健壮性检查)ifimgisNone:print(f"错误:无法加载图像{img_path}")else:#2.创建可调整大小的窗口dWindow("HappyFish",cv2.WINDOW_NORMAL)#3.显示图像cv2.imshow("HappyFish",img)#4.等待按键(0=无限等待)cv2.waitKey(0)#5.清理资源cv2.destroyAllWindows()任务描述编写程序,读取项目目录下cvpicture文件夹中的HappyFish.jpg图像文件,并将其在一个可调整大小的窗口中展示出来。路径处理使用os.path拼接路径,可避免不同操作系统的路径分隔符差异导致的报错。健壮性检查必须判断img是否为None,以处理文件不存在或损坏的情况。任务实现:保存图像任务描述将上一个任务中成功读取的图像数据,以BMP格式另存到本地计算机的D盘根目录下,并重命名为HappyFish_Copy。代码核心解析●核心函数:使用cv2.imwrite()函数完成保存。保存的格式由文件名后缀决定(如.bmp,.png)。●状态反馈:函数返回一个布尔值(True/False),用于判断保存是否成功,便于进行后续的错误处理逻辑。●路径处理:在Windows系统中,路径分隔符使用双反斜杠\\或在字符串前加r定义为原始字符串。Python实现代码#导入库与读取图片importcv2,osimg=cv2.imread(os.path.join(os.path.dirname(__file__),'cvpicture/HappyFish.jpg'))ifimgisnotNone:save_path=r"D:\HappyFish_Copy.bmp"is_saved=cv2.imwrite(save_path,img)print("保存成功!"ifis_savedelse"保存失败,请检查路径权限。")else:print("错误:图片加载失败!")任务实现:交互式显示(进阶)任务目标编写程序读取图片,若在3秒内按下“1”键则显示图片的灰度版本;若超时或按下其他按键,则显示原始的彩色版本。#1.等待3秒并获取用户按键key=cv2.waitKey(3000)&0xFF#2.根据按键逻辑判断显示模式ifkey==ord('1'):img=cv2.imread(path,cv2.IMREAD_GRAYSCALE)print("显示灰度图像")else:img=cv2.imread(path,cv2.IMREAD_COLOR)print("显示彩色图像")按下“1”键→灰度图程序运行窗口界面💡核心知识点•cv2.waitKey(delay):参数为等待时间(毫秒),若在时间内按下键则返回该键的ASCII码,否则返回-1。•ord('1'):将字符转换为对应的ASCII码值,用于和waitKey的返回值进行比较,实现按键逻辑判断。知识拓展:获取图像属性图像在内存中是以numpy.ndarray的形式存在的,我们可以通过访问其属性快速获取图像的关键维度、像素与类型信息。img.shape|获取维度元组彩色图返回(高,宽,3);灰度图返回(高,宽)。
例:(194,259,3)或(194,259)img.ndim|获取维度数量返回一个整数,表示图像的维度数。
例:彩色图为3,灰度图为2img.size|获取总像素数即所有维度元素的乘积,代表图像像素总量。
例:194×259×3=149,958个像素img.dtype|获取数据类型通常为8位无符号整数,表示像素值范围为0-255。
例:dtype('uint8')>>>importcv2;img=cv2.imread('HappyFish.jpg')>>>print(f"Shape:{img.shape},Size:{img.size},Dtype:{img.dtype}")Shape:(194,259,3),Size:149958,Dtype:uint8第二部分:动态图像(视频)的处理▍知识准备:视频处理基础视频本质上是一系列连续的图像(称为帧(Frame))以一定的速率(称为帧率(FPS))播放。在OpenCV中,我们主要通过以下两个核心类来实现对视频流的完整生命周期管理:cv2.VideoCapture·视频读取与捕获用于从摄像头设备(通过设备ID,通常从0开始)或本地视频文件(通过文件路径)中读取视频帧,构建视频流输入管道。cap=cv2.VideoCapture(0)|cap.isOpened()
ret,frame=cap.read()|cap.release()cv2.VideoWriter·视频编码与保存将处理后的图像帧序列,按照指定的编码格式(FourCC)、帧率和分辨率,编码并写入生成新的视频文件。fourcc=cv2.VideoWriter_fourcc(*'XVID')
out=cv2.VideoWriter('out.avi',fourcc,20.0,(640,480))任务实现:录制摄像头视频任务核心目标调用电脑默认摄像头,实时渲染并展示捕获的画面。同时将每一帧画面编码并写入本地文件`output.avi`中,直到用户按下键盘上的ESC键,程序才停止录制并退出。#PythonImplementation(OpenCV)importcv2cap=cv2.VideoCapture(0)#初始化捕获ifnotcap.isOpened():exit()#获取参数并初始化视频写入器w,h=int(cap.get(3)),int(cap.get(4))out=cv2.VideoWriter('out.avi',cv2.VideoWriter_fourcc(*'XVID'),20.0,(w,h))#循环录制直到按下ESCwhilecap.isOpened():ret,frame=cap.read()ifret:out.write(frame)cv2.imshow('LiveFeed',frame)ifcv2.waitKey(1)&0xFF==27:breakcap.release()#释放资源out.release()cv2.destroyAllWindows()关键执行流程解析①初始化:使用`VideoCapture(0)`连接硬件,确认设备就绪。
②编码:设定视频编码格式(FourCC)及帧率,创建文件写入流。
③清理:程序结束时必须释放`cap`和`out`资源,避免内存泄漏。任务实现:批量定时录制视频任务目标循环录制5个视频,每个视频固定时长10秒,并自动以当前系统的时间戳(精确到秒)作为文件名进行保存,避免文件重名覆盖。importcv2,time,os#初始化摄像头(放在循环外提升性能)cap=cv2.VideoCapture(0)fps,w,h=20,int(cap.get(3)),int(cap.get(4))foriinrange(5):#录制5次循环ts=time.strftime('%Y%m%d_%H%M%S')#获取时间戳out=cv2.VideoWriter(f'{ts}.avi',cv2.VideoWriter_fourcc(*'XVID'),fps,(w,h))start=time.time()#记录开始时刻whilecap.isOpened()andtime.time()-start<10:#录制10秒_,frame=cap.read()if_:out.write(frame)#释放资源,程序结束cap.release();cv2.destroyAllWindows()文件生成效果预览📌关键提示:1.VideoCapture在循环外初始化,避免重复开启/关闭摄像头。2.VideoWriter放在循环内,每次生成新对象对应不同文件。3.使用time.time()计算时长,比计数帧更精准。第三部分:图像文件的批量整理📚知识准备:Python文件操作基础os模块Python内置的操作系统接口,是管理文件与目录的核心工具。●os.walk(path):递归遍历指定目录下的所有文件与子目录。●os.path.join(...):跨平台安全拼接路径与文件名,避免手动拼接出错。●os.remove(file):删除指定路径的文件,用于清理冗余图像。shutil模块提供比os模块更高级、更便捷的文件操作功能,专注于文件的复制与移动。●shutil.copy(src,dst):
将文件从源路径src复制到目标路径dst。在整理图片时,可将符合条件的图片批量归档。●shutil.move(src,dst):
将文件从一个位置移动到另一个位置,常用于重分类。异常处理批量处理成百上千张图片时,为防止程序遇到单个错误就崩溃,必须引入防御机制。●try...except:捕获并处理运行时错误(如:文件权限不足、路径不存在、图片文件损坏等),确保程序能继续处理下一个文件。💡关键作用:让脚本具备“健壮性”,避免“一颗老鼠屎坏了一锅汤”。任务实现:删除非图像文件与小尺寸图片任务一:清理非媒体格式文件遍历`cvpicture`目录下的所有文件,检查文件扩展名,仅保留常见图像和视频格式文件,删除其余类型文件。importosALLOWED_EXTENSIONS={'.png','.jpg','.jpeg','.bmp','.avi'}root_dir=os.path.join(os.path.dirname(os.path.abspath(__file__)),'cvpicture')fordirpath,_,filenamesinos.walk(root_dir):forfinfilenames:ext=os.path.splitext(f)[1].lower()ifextnotinALLOWED_EXTENSIONS:os.remove(os.path.join(dirpath,f))任务二:过滤低像素图片文件读取目录中的图像文件,计算总像素数,删除像素总数小于40,000的小尺寸图片,防止处理无效素材。importos,cv2PIXEL_THRESHOLD=40000root_dir=os.path.join(os.path.dirname(os.path.abspath(__file__)),'cvpicture')fordirpath,_,filenamesinos.walk(root_dir):forfinfilenames:p=os.path.join(dirpath,f)img=cv2.imread(p)ifimgisnotNoneandimg.size<PIXEL_THRESHOLD:os.remove(p)任务实现:分类灰度与彩色图片任务描述编写脚本自动遍历cvpicture目录下的所有图片文件,判断其色彩模式,并将灰度图移动至graypicture文件夹,彩色图移动至colorpicture文件夹。importos,cv2,shutilsrc,gray_dst,color_dst="cvpicture","graypicture","colorpicture"#遍历源目录中的所有文件forfilenameinos.listdir(src):path=os.path.join(src,filename)img=cv2.imread(path,cv2.IMREAD_UNCHANGED)ifimg.ndim==2:#灰度图维度为2,彩色图通常为3shutil.copy(path,os.path.join(gray_dst,filename))else:shutil.copy(path,os.path.join(color_dst,filename))核心逻辑解析利用OpenCV的imread读取图片,通过判断img.ndim(数组维度)属性进行分类:•维度=2→灰度图(GrayScale)
•维度=3→彩色图(ColorImage)项目总结静态图像操作(读取/显示/存储)核心函数:imread()·imshow()·imwrite()·waitKey()动态视频处理(读取/写入/释放)关键类:VideoCapture()·VideoWriter()批量文件操作(遍历/复制/移动/删除)核心模块:os.walk()·shutil.copy()·os.makedirs()开发辅助模块(时间戳/健壮性保障)关键组件:time模块·try...except异常处理思考与练习一、选择题1.在OpenCV中,用于从文件中读取图像的基本函数是?
(A)imread()(B)imshow()
(C)imwrite()(D)waitkey()2.用于初始化视频捕获对象,以打开摄像头或视频文件的类是?
(A)VideoCapture()(B)cap.release()
(C)cap.read()(D)VideoWriter()二、填空题1.图像读取是将图像从磁盘读入内存,OpenCV通过`cv2.imread()`函数读取图像像素。2.视频是由一系列序列图像构成的,这一系列图像称为帧,播放速率的单位通常是帧/秒(FPS)。三、简答题1.简述`cv2.waitKey()`函数的作用,并说明参数为0和参数为1的区别。2.阐述`os.walk()`函数的作用及其返回值的含义。(提示:可结合Python文件遍历逻辑思考)思考与练习:编程实践01/挑战任务修改“交互式显示”的代码,实现对键盘的多条件响应:•按下`g`键:显示当前图像的灰度模式
•按下`c`键:切换回图像的彩色模式
•按下`s`键:将当前显示的图像保存到本地
•按下ESC键:退出整个显示程序02/拓展任务编写一个批量处理脚本,实现图片格式的自动化转换:•功能要求:扫描并读取指定目录下的所有文件
•筛选条件:识别出所有后缀为`.jpg`的图像文件
•处理逻辑:将筛选出的图片转换为`.png`格式,并保存到指定的新目录中,保留原文件的名称信息。Q&A感谢观看THANKYOUFORLISTENING项目三:基于NumPy处理图像深入理解图像的数字化本质
COMPUTERVISION·计算机视觉系列课程任务导入:从生活实例看图像处理生活中的图像处理•手机里的“美图秀秀”,是如何实现“复古颗粒感”、“素描”等滤镜效果的?•还有那些有趣的“艺术二维码”,它们为什么既是二维码,又像一幅画?探索任务:NumPy的魔法这些酷炫效果背后,是对图像底层像素数据的直接操作。在Python世界里,NumPy是处理底层数据的最强工具之一。今天,我们就用它来亲手创造图像效果!看似神奇的滤镜效果
其实都是对像素数据的高效运算!学习目标:知识、能力与素质目标知识目标KNOWLEDGE●理解:深刻理解数字图像本质上是一个NumPy多维数组(`ndarray`)。●掌握:掌握灰度图像(二维数组)与彩色图像(三维数组)的表示方法。●熟悉:熟悉NumPy数组操作常用函数,如`np.zeros`,`np.ones`,`np.hstack`等。能力目标SKILLS✓生成:运用NumPy创建指定尺寸与颜色的灰度/彩色图像。✓操作:对图像进行裁剪、缩放、翻转、合并等几何变换。✓处理:实现图像二值化、通道分离与合并等像素级操作。✓应用:运用NumPy实现简单的图像加密与解密算法。素质目标QUALITIES▶逻辑思维:培养将视觉效果转化为数学运算与代码逻辑的思维能力。▶问题解决:提升在代码实现中发现、分析并解决问题的综合能力。▶创新意识:激发利用编程工具进行艺术创作与技术创新的浓厚兴趣。核心知识:NumPy与数字图像什么是NumPy?NumPy(NumericalPython)是Python生态中用于科学计算的基础核心库。它的核心优势在于提供了:高性能的多维数组对象ndarray大量用于数组操作的数学函数,比原生Python快得多图像的本质在计算机眼中,所有图像本质上就是多维数组。🎨灰度图像(2D)
二维数组。每个元素是0(黑)到255(白)的像素值。🖼️彩色图像(3D)
三维数组(高×宽×通道)。通道通常为3,分别代表B、G、R颜色分量。两个关键属性1.形状(shape)
返回一个元组,描述数组维度。例如彩色图通常为(H,W,3),直接告诉我们图像的高、宽和颜色通道数。2.类型(dtype)
返回数组元素的数据类型。在图像处理中,最常见的是np.uint8(8位无符号整数,范围0-255)。案例实战一:从零开始生成图像(灰度)学习目标掌握利用NumPy数组创建图像的核心逻辑,理解像素值与灰度图像的关系,并通过基础代码实现从纯色到随机噪点的不同灰度效果。importcv2importnumpyasnp#1.创建300x300的全黑灰度图像(像素值0)img_black=np.zeros((300,300),dtype=np.uint8)#2.切片操作:在中间区域绘制白色方块(像素值255)img_black[50:250,50:250]=255#3.随机填充:在中心绘制随机噪点方块img_black[100:200,100:200]=np.random.randint(0,256,size=[100,100])cv2.imshow("FinalImage",img_black);cv2.waitKey(0)效果预览:代码生成的三层灰度结构黑底·白色实心方块·随机噪点区域案例实战一:从零开始生成图像(彩色)核心目标掌握使用NumPy数组操作创建彩色图像的方法,理解图像在计算机中的多维数组表示形式,并通过简单的数组索引操作实现基础的图像绘制。💡实现思路拆解01画布创建:利用np.ones()生成一个300x300x3的全1数组,乘以255得到纯白背景。02绘制黄色块:基于OpenCV的BGR色彩模型,将中央区域的蓝色(B)通道值设为0,保留全量的绿色(G)和红色(R)。03生成噪点块:使用np.random.randint()生成三维随机数组,直接赋值给图像的中间区域,生成彩色噪点。#1.创建300x300的全白彩色图像(3通道)
img=np.ones((300,300,3),np.uint8)*255
#2.绘制黄色方块(B=0,G=255,R=255)
img[50:250,50:250,0]=0
#3.绘制彩色随机噪点方块
img[100:200,100:200]=np.random.randint(0,256,[100,100,3],np.uint8)
cv2.imshow("Result",img)案例实战二:图像的基本变换与组合(一)学习目标掌握利用NumPy切片操作实现图像的高效缩小,以及通过坐标计算将一个图像合并到另一个图像指定位置的核心逻辑。Python代码实现:图像缩放与合并importcv2importnumpyasnp#1.读取背景图和Logo图bg=cv2.imread(r"../cvpicture/HappyFish.jpg")logo=cv2.imread(r"../cvpicture/opencv-logo.png")#2.切片技巧:每隔10个像素取点,实现10倍缩小logo_small=logo[::10,::10]#3.获取尺寸并将logo合并到背景图右上角h,w=logo_small.shape[:2]bg[:h,bg.shape[1]-w:]=logo_small案例实战二:图像的基本变换与组合(二)🎯学习目标掌握使用NumPy切片实现图像的水平、垂直及双向翻转操作;并学习使用拼接函数将多幅图像组合成一张2x2的网格图。#1.生成三种翻转版本img_flip_h=img[:,::-1]#水平翻转(左右镜像)img_flip_v=img[::-1,:]#垂直翻转(上下镜像)img_flip_b=img[::-1,::-1]#水平+垂直翻转#2.拼接为2x2网格图img_grid=np.vstack((np.hstack((img,img_flip_h)),np.hstack((img_flip_v,img_flip_b))))🖼️最终拼接效果示意Original原图HorizontalFlip水平翻转VerticalFlip垂直翻转Bi-directionalFlip水平+垂直翻转案例实战三:图像的二值化处理核心目标将灰度图像转换为只有黑和白两种颜色的图像,简化图像信息,突出主体轮廓,为后续的轮廓检测、特征提取等任务打下基础。实现原理设定一个像素阈值(如127,即0-255中间值),遍历图像所有像素点:将像素值大于阈值的设为白色(255),小于等于阈值的设为黑色(0),从而完成二值化转换。importcv2,numpyasnp#1.读取灰度图:img_gray=cv2.imread("path",cv2.IMREAD_GRAYSCALE)mask=img_gray>127#2.创建布尔掩码:大于127的像素点为Trueimg_bin=mask*255#3.生成二值图:True转为255(白),False转为0(黑)案例实战四:趣味应用—图像加密与解密(加密篇)核心目标通过打乱图像像素的物理排列顺序,彻底改变图像的视觉呈现效果,使图像不可读,从而实现对图像内容的加密保护。加密核心原理1.数组展平:使用flatten()将二维图像矩阵转化为一维像素数组,打破原有空间结构。2.生成密钥:生成一个包含所有像素索引的序列并随机打乱,这个乱序索引表即“密码本”。3.像素重排:按照乱序的“密码本”索引,重新映射像素位置,生成无法识别的加密图像。Python代码实现#1.导入库并读取图像importcv2importnumpyasnpimg=cv2.imread("HappyFish.jpg");h,w=img.shape[:2]#2.展平图像并生成随机密钥img_flat=img.flatten()#展平为一维数组key=np.arange(img.size)#生成索引序列np.random.shuffle(key)#打乱顺序,作为"密码本"#3.按密钥重排像素实现加密,并恢复形状img_encrypted=img_flat[key].reshape(h,w,-1)cv2.imwrite("Encrypted_Fish.jpg",img_encrypted)案例实战四:趣味应用—图像加密与解密(解密篇)解密目标利用加密时生成的“密码本”,将打乱的像素点重新映射回原始位置,从而恢复图像的本来面目。核心原理基于同一个密钥(密码本)进行反向索引操作。
公式:原始像素[key[i]]=加密像素[i]#===解密过程:根据密钥反向映射===
img_decrypted_flat=np.zeros_like(img_encrypted_flat)
#循环完成解密映射,这是解密的关键步骤
foriinrange(total_pixels):img_decrypted_flat[key[i]]=img_encrypted_flat[i]
img_decrypted=img_decrypted_flat.reshape(h,w,-1)#恢复图像形状原始图像(Original)未经处理的原始数据
作为解密的“标准答案”加密图像(Encrypted)像素位置被打乱的乱码
无法直接识别内容解密图像(Decrypted)恢复像素顺序后
与原始图像完全一致项目总结:知识回顾与技能梳理💡核心思想:一切图像处理皆为数组操作(AllImageProcessingisArrayOperation)📚NumPy图像处理知识体系🎨NumPy生成图像•数组创建:np.zeros,np.ones|随机模块:np.random.randint
•基础切片:img[y1:y2,x1:x2]实现精确的区域定位🔄NumPy变换图像•翻转技巧:img[::-1](上下),img[:,::-1](左右)
•图像拼接:np.hstack(水平),np.vstack(垂直)组合创意🔧NumPy处理图像•二值化:利用布尔索引img>threshold提取特征
•简单加密:flatten+shuffle+reshape打乱像素排列🛠️关键技能掌握✅掌握了从0开始,使用数组创建基础几何图形的方法✅熟练使用数组切片进行图像区域的复制、粘贴与修改✅理解了翻转、拼接等图像变换背后的数组轴操作逻辑✅了解了像素级操作在二值化和图像加密中的应用潜力课后练习一、选择题1.可以通过哪个模块中的随机数函数,产生一系列的随机数组?
(A)array数组(B)np.random(C)内置数学运算(D)np.repeat()2.用于将多个图像在水平方向上拼接的函数是?
(A)np.repeat()(B)np.hstack()(C)np.vstack()(D)np.delete()二、填空题1.对图像进行灰度化处理能直接利用图像的灰度特性,对于区分目标和背景非常有效。2.图像在进行加密处理时,可使用`np.random.shuffle()`对图像的像素/通道/行列打乱顺序,实现图像的加密。三、简答题1.请简述如何使用NumPy将一张彩色图像的红色通道全部置为0。2.请描述图像加密与解密的基本步骤,并说明“密码本”在其中的作用。四、编程实践1.尝试生成一张中国国旗的图像(红底黄星)。2.读取一张自己的照片,尝试将其转换为“怀旧照片”效果(例如,降低饱和度,增加颗粒感)。Q&A感谢观看THANKYOUFORWATCHING项目四:基于OpenCV处理图像打造一个简单的图像标注工具COMPUTERVISION·计算机视觉系列课程任务导入:打造一个简单的图像标注工具【案例背景】在自动驾驶、医疗影像分析等领域,我们常常需要对图像中的特定目标进行标注,例如用矩形框出车辆,用圆形标记病灶,这是实现智能分析的重要一步。【面临挑战】如何利用OpenCV在图像上精确地绘制出这些几何图形,并灵活添加必要的文字说明?如何保证绘制效果清晰且不破坏原图的关键信息?【引入课题】本项目将学习如何使用OpenCV的核心绘图函数,在图像上绘制直线、矩形、圆形等基本图形,并添加文字标签,为后续开发一个功能完备的图像标注工具打下坚实基础。【本项目任务】1.在图像上绘制一个蓝色矩形框,精准框出目标物体。
2.在矩形框旁添加红色文字标签,说明目标类别。
3.对标注后的图像执行缩放与翻转的变换操作。本项目学习目标知识目标Knowledge●理解图像通道:掌握图像通道的拆分与合并原理,理解不同色彩空间的通道特性。●掌握绘图函数:熟悉OpenCV中在图像上绘制直线、矩形、圆形及添加文字的函数用法。●理解几何变换:掌握图像缩放、翻转、平移和旋转等几何变换背后的矩阵运算原理。●掌握阈值处理:深入理解固定阈值、自适应阈值和Otsu二值化算法的适用场景与原理。●理解算术运算:掌握图像加法、加权叠加以及位运算在图像处理中的逻辑与应用。能力目标Skills🎯图像绘制能力
能独立编写Python代码,在任意图像上精确绘制各类几何图形并添加文本信息。🔄图像变换能力
熟练运用OpenCV函数对图像进行缩放、翻转、裁剪等操作,适应不同处理需求。✂️图像分割能力
能够根据实际场景选择正确的阈值方法,实现前景与背景的有效分割。🧩图像融合能力
灵活运用算术运算,将多张图像进行叠加、混合或组合,实现创意合成效果。素质目标Competence🧠培养逻辑思维
通过分析不同图像处理技术的原理、参数差异及适用场景,锻炼对复杂问题的分析能力,培养严谨的逻辑推理与抽象思维能力。🛠️提升实践能力
在动手编写代码解决实际图像处理问题的过程中,不断增强工程实践能力和调试排错能力,提升解决实际问题的综合素质。课程目录CONTENTS01OpenCV图像处理基础•图像通道的拆分与合并
•在图像上绘制图形与文字02图像的几何变换•图像缩放
•图像翻转03图像的阈值处理•固定阈值与自适应阈值
•Otsu二值化04图像的算术与位运算•图像加法与加权叠加
•图像位运算与掩膜操作课程介绍与学习目标学习情境在当今的计算机视觉项目中,图像是信息的核心载体。本课程将带领大家深入探索如何利用OpenCV库对图像进行各种处理,从基础的通道操作到复杂的几何变换和算术运算。核心知识•色彩空间:掌握OpenCV默认的BGR格式与常见RGB格式的转换逻辑。•基础操作:熟练掌握图像的拆分、合并、绘制、缩放及旋转等基础功能。•核心技术:深入理解并实践阈值处理、平滑处理、形态学操作等关键技术。学习目标•知识层面:透彻理解图像处理的基本概念和主流算法背后的数学与逻辑原理。•技能层面:能独立调用OpenCV库函数,高效完成各类常规的图像处理任务。•应用层面:具备解决实际问题的能力,能完成文档扫描、简单目标识别等项目。第一部分:OpenCV图像处理基础▍任务4.1:图像通道的拆分与合并核心概念:BGR色彩模式彩色图像在OpenCV中默认以BGR(蓝、绿、红)三个独立通道的形式存储。在进行色彩调整、滤镜处理时,我们常需要分离出单个颜色通道进行独立计算,处理后再将其重新组合。核心操作函数●cv2.split(img):将图像拆分为独立的B,G,R单通道灰度图。返回一个包含三个数组的列表。●cv2.merge([b,g,r]):将处理后的单通道图像按顺序重新合并为一张完整的彩色图像。输入必须为一个包含三个元素的列表。色彩空间与通道可视化
不同色彩空间(如RGB,HSV,YCrCb)拥有不同的色域范围。在OpenCV中,掌握通道拆分与合并是理解色彩空间转换与处理的基石。任务4.1:代码实现与分析任务要求读取一张彩色图片,使用图像处理库将其拆分为独立的B、G、R颜色通道。实现两个关键的可视化操作:1.单独显示拆分出的蓝色通道分量,观察其灰度表现。2.构造并显示一张仅保留蓝色通道、其余通道清零的彩色图片。代码实现(Python)#1.读取图像并拆分通道img=cv2.imread("HappyFish.jpg")b,g,r=cv2.split(img)#2.构造仅保留蓝色的三通道图g0=np.zeros_like(b)img_blue=cv2.merge([b,g0,r0])#3.分别显示对比cv2.imshow("BlueChannel(Gray)",b)cv2.imshow("OnlyBlue",img_blue)关键区别解析直接显示`b`变量:呈现为灰度图。因为拆分后的`b`是单通道矩阵,OpenCV默认将其作为灰度图像渲染,无法体现色彩信息。显示合并后的`img_blue`:呈现为蓝色调的彩色图。虽然G、R通道数值为0,但这是一个完整的三通道矩阵,系统能正确解析并显示出蓝色分量。任务4.2:在图像上绘制图形与文字💡核心概念:OpenCV提供了丰富的绘图功能,可以在图像上绘制各种几何形状和添加文字注释,常用于结果可视化与目标标记。常用绘图函数▫️`cv2.line(img,pt1,pt2,color,thickness)`:绘制直线,定义起点和终点坐标。▫️`cv2.rectangle(img,pt1,pt2,color,thickness)`:绘制矩形,定义左上角和右下角。▫️`cv2.circle(img,center,radius,color,thickness)`:绘制圆形,定义圆心和半径。▫️`cv2.ellipse(...)`:绘制椭圆,需指定中心点、长/短轴、旋转角度等。▫️`cv2.putText(img,text,org,fontFace,...)`:在图像指定位置绘制文本字符串。通用参数解析img·画布载体
需要在其上进行绘制操作的输入/输出图像对象,操作会直接修改原图。color·颜色定义
形状的颜色,使用BGR格式的元组表示,例如红色为`(0,0,255)`。thickness·线条粗细
正数代表线条的像素宽度;若为-1,则表示填充整个图形内部。任务4.2:综合绘图案例任务目标与要求在一张800x400的空白白色图像上,结合使用绘图函数,完成以下操作:
1.绘制分割线,划分图像区域。
2.随机绘制多个矩形、圆形与椭圆。
3.添加自定义文本标签。#1.创建背景与分割线img=np.ones((400,800,3),dtype=np.uint8)*255cv2.line(img,(0,200),(800,200),(0,0,0),3)#2.绘制随机形状(矩形、圆、椭圆)cv2.rectangle(img,pt1,pt2,color,3)#随机颜色与位置cv2.circle(img,(100,300),r,(0,0,255),random_thickness)#3.添加文字标签并展示cv2.putText(img,'OpenCV',(320,320),cv2.FONT_HERSHEY_SIMPLEX,3,(0,0,255),15)代码运行效果预览•左上角:3个颜色与位置均随机生成的矩形。
•左下角:一组同心、不同粗细的蓝色圆形。
•右上角:3个不同旋转角度的红色椭圆。
•右下角:醒目的红色OpenCV文字标识。拓展学习:绘制中文字符核心痛点:OpenCV原生函数cv2.putText()仅支持ASCII字符集,直接输入中文会显示为乱码或方框,无法满足本地化需求。解决方案:引入PythonImagingLibrary(PIL/Pillow)库,利用其强大的文字渲染能力,通过图像格式转换实现中文绘制。🔄关键步骤拆解01.格式转换
OpenCV(BGR)➔PIL(RGB)02.资源加载
使用ImageFont加载中文字体文件03.绘制文字|用ImageDraw渲染中文04.还原格式|PIL➔OpenCV(BGR)importcv2,numpyasnp
fromPILimportImage,ImageDraw,ImageFont
img_cv=cv2.imread("your_img.jpg")
#1.格式转换(BGR->RGB)
img_pil=Image.fromarray(cv2.cvtColor(img_cv,cv2.COLOR_BGR2RGB))
draw=ImageDraw.Draw(img_pil)
font=ImageFont.truetype("simhei.ttf",40)
draw.text((10,10),"OpenCV中文显示成功!",font=font,fill=(255,0,0))
img_cv=cv2.cvtColor(np.array(img_pil),cv2.COLOR_RGB2BGR)✅最终效果:
成功在OpenCV窗口中渲染出清晰的中文文本,解决了乱码问题。可灵活调整字体、大小与颜色。第二部分:图像的几何变换任务4.3:图像缩放(ImageResizing)核心概念改变数字图像的物理尺寸大小,在保持图像原有内容的基础上,实现放大(ZoomIn)或缩小(ZoomOut)操作。OpenCV关键函数:cv2.resize()cv2.resize(src,dsize[,fx,fy[,interpolation]])参数说明:•src/dsize:输入图像/目标尺寸(width,height),若为None则用fx/fy比例缩放。•fx,fy:水平/垂直方向的缩放系数(例如:0.5表示缩小一半)。•interpolation:插值方式(默认:放大用INTER_LINEAR,缩小用INTER_AREA)。插值方法速查:缩小:INTER_AREA|放大:INTER_LINEAR(推荐)|高质量:INTER_CUBIC任务4.3:代码实现任务目标与分析📝任务要求:对一张彩色图片进行几何变换:水平方向拉伸为原尺寸的2倍,垂直方向压缩为原尺寸的0.5倍。💡实现思路:代码展示了两种等效方法:1.方法一:手动计算宽高,通过dsize参数指定新尺寸。2.方法二:通过设置fx,fy直接指定缩放比例,更加简洁。#导入OpenCV库并读取图像importcv2img=cv2.imread(r"../colorpicture/HappyFish.jpg")rows,cols=img.shape[:2]#获取高和宽#方法一:指定目标尺寸dsize(宽,高)new_size=(int(cols*2),int(rows*0.5))rst1=cv2.resize(img,new_size)#方法二:指定缩放因子fx,fy(更简洁)rst2=cv2.resize(img,None,fx=2,fy=0.5)#显示图像并释放资源cv2.imshow("Original",img);cv2.imshow("Method1",rst1);cv2.imshow("Method2",rst2)cv2.waitKey(0);cv2.destroyAllWindows()任务4.4:图像翻转核心概念图像翻转是指将图像按照特定轴进行镜像变换。它是计算机视觉中常用的基础操作,广泛应用于数据增强、对称图像生成及镜像特效制作。关键函数:cv2.flip(src,flipCode)•flipCode=0:绕X轴翻转(垂直翻转,上下颠倒)•flipCode>0:绕Y轴翻转(水平翻转,左右镜像)•flipCode<0:同时绕X轴和Y轴翻转(对角/原点翻转)💻代码实现(Python)img=cv2.imread("HappyFish.jpg")flip_x=cv2.flip(img,0)#垂直翻转(X轴)flip_y=cv2.flip(img,1)#水平翻转(Y轴)flip_xy=cv2.flip(img,-1)#对角翻转(X+Y轴)cv2.imshow("AllFlips",stackImages(0.5,([img,flip_y],[flip_x,flip_xy])))📸效果预览左侧图片展示了将原始图与三种翻转后的图像进行网格拼接的最终效果。可以直观地对比不同翻转模式的差异。第三部分:图像的阈值处理任务4.5:图像的阈值处理核心概念一种简单高效的图像分割技术。通过设定一个数值作为“界限”,将灰度图像中的像素点分为两类:大于阈值的部分和小于阈值的部分,从而提取图像中的目标区域。OpenCV关键函数:cv2.threshold(src,thresh,maxval,type)🔸参数解析:src:输入图像(必须为灰度图)thresh:设定的分割阈值(0-255)maxval:二值化的最大值(通常为255)🔹常见类型(type):•BINARY:大于阈值取maxval,否则0•BINARY_INV:大于阈值取0,否则maxval•TRUNC/TOZERO:截断或归零模式💡实用技巧1.阈值选取:如果不确定阈值,可尝试从127开始测试,或使用Otsu二值化自动计算。
2.应用场景:常用于去除背景、提取轮廓、文档扫描等对黑白对比要求高的场景。任务4.5:代码实现与效果▍代码实现(Python&OpenCV)importcv2importopencv_add_hvstack#1.以灰度模式读取输入图像img=cv2.imread("HappyFish.jpg",cv2.IMREAD_GRAYSCALE)#2.应用五种不同的固定阈值处理方法(阈值=150)_,bin=cv2.threshold(img,150,255,cv2.THRESH_BINARY)_,inv=cv2.threshold(img,150,255,cv2.THRESH_BINARY_INV)_,trun=cv2.threshold(img,150,255,cv2.THRESH_TRUNC)_,zero=cv2.threshold(img,150,255,cv2.THRESH_TOZERO)#3.合并并展示所有处理结果stack=opencv_add_hvstack.stackImages(0.8,([img,bin,inv],[trun,zero,cv2.THRESH_TOZERO_INV]))cv2.imshow("ThresholdComparison",stack);cv2.waitKey(0)▍运行效果展示从左到右,从上到下依次展示了:原始灰度图、二值化(Binary)、反二值化(Inv)、截断(Trunc)、取零(ToZero)、反取零(ToZeroInv)的视觉效果差异。任务4.5:高级阈值处理Otsu二值化(大津算法)适用于直方图呈现明显双峰分布的图像,算法能自动计算并确定一个最佳阈值,最大化前景与背景的类间方差。cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)自适应阈值(AdaptiveThreshold)解决光照不均问题,基于像素周围的小邻域计算局部阈值。关键参数:•Method:均值(ADAPTIVE_THRESH_MEAN_C)/高斯加权(GAUSSIAN_C)
•BlockSize:计算阈值的邻域大小(需为奇数)。
•C:从均值/加权均值中减去的常数,用于微调对比度。场景与效果对比上方展示了自适应阈值处理后的图像效果。相比于全局阈值,它能很好地保留暗部与亮部的细节,常用于文档扫描、车牌识别、以及光照条件复杂的户外场景分析。第四部分:图像的算术与位运算任务4.6:图像的加法处理核心概念图像加法在计算机视觉中是基础且常用的操作,主要应用场景包括:●调整图像整体亮度:给每个像素点加上一个固定值。●图像叠加融合:将两张或多张图像按比例混合,常用于添加水印、融合场景等。两种加法逻辑1.Numpy加法(`+`)基于“模运算”:(a+b)%256。当数值超过255时,会像钟表一样循环,可能导致画面色彩异常(如亮度反转)。2.OpenCV加法(`cv2.add()`)基于“饱和运算”:min(a+b,255)。超过255的数值直接取255,结果更符合人眼视觉习惯,是图像处理的首选。加权叠加(Blending)通过cv2.addWeighted实现两张图片的平滑过渡,公式:dst=src1×α+src2×β+γ•α/β:第一/二张图片的权重(通常满足α+β=1)。
•γ:亮度调整量,为图像整体提供一个偏移量。任务4.6:代码实现与效果💻代码逻辑解析(Python+OpenCV)importcv2importcopy#1.读取并预处理图像img_bg=cv2.imread(r"../colorpicture/HappyFish.jpg")img_logo=cv2.imread(r"../colorpicture/opencv-logo-white.png")img_logo=cv2.resize(img_logo,None,fx=0.5,fy=0.5)#2.计算背景图中放置Logo的中心区域(ROI)h_bg,w_bg=img_bg.shape[:2]h_logo,w_logo=img_logo.shape[:2]center_y,center_x=(h_bg-h_logo)//2,(w_bg-w_logo)//2roi=img_bg[center_y:center_y+h_logo,center_x:center_x+w_logo]#3.核心操作:加权叠加(Logo透明度0.4,背景透明度0.6)blended_roi=cv2.addWeighted(img_logo,0.4,roi,0.6,0)#4.将融合后的区域放回原图并显示img_result=copy.deepcopy(img_bg)img_result[center_y:center_y+h
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 3月思想报告2026(3篇)
- 干法读后感:以工作磨砺心志
- 2026年司法行政实务知识冲刺押题试卷及解析
- 2026年财会初级考试专项训练及解析
- 2026年事业单位医学试卷及解析
- 2026年幼儿保育教师考试试卷及解析
- 下肢动脉硬化是怎么回事:一文读懂
- 2026年历史学科综合能力培训试卷及解析
- BEC高级模拟试卷(考前必背)
- BEC中级真题解析(名师精讲)
- 2026山东消防员招聘考试(公共基础知识)历年参考题库含答案详解
- 2025年辽宁省市场监督管理局下属事业单位真题
- 2025年全国计算机等级考试(三级-网络技术)真题试卷及答案
- 2026中国体育区块链行业应用场景与市场潜力研究报告
- 奶茶店员工交接班管理制度
- 配电箱柜进场验收记录
- 2026版SPC培训精要课件
- 管理学原理 教案 第四章 决策
- 初中数学人教九年级上册第二十四章圆数学活动探究四点共圆的条件PPT
- 中医药翻译技巧课件
- 三上话说温州家乡的地形市公开课金奖市赛课一等奖课件
评论
0/150
提交评论