OpenCV图像处理实战293_第1页
OpenCV图像处理实战293_第2页
OpenCV图像处理实战293_第3页
OpenCV图像处理实战293_第4页
OpenCV图像处理实战293_第5页
已阅读5页,还剩288页未读, 继续免费阅读

下载本文档

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

文档简介

第一章OpenCV概述1.1OpenCV概述OpenCV简介OpenCV(OpenSourceComputerVisionLibrary):中文名称为开源计算机视觉库;OpenCV支持多语言、跨平台、功能强大,为计算机视觉专业开发人员提供了灵活的开发接口;OpenCV由C语言和C++编写,可以运行在Linux、Windows、Android和MacOS等平台上;OpenCV具有轻量级的特点,提供了Python、Ruby、Matlab等语言的接口;OpenCV中实现了很多计算机视觉方面的通用算法。1.1OpenCV简介1.

OpenCV模块功能基础数据模块:包含了与图像处理有关的数据结构和基本函数方法;图像处理模块:包含了图像处理相关的算法,例如图像滤波、图像变换、颜色空间转换等;高层用户界面模块和媒体输入/输出模块:为用户提供了图像的图形窗口操作功能,例如创建窗口显示图像或者视频等二维特征框架模块:用于图像的特征提取,可以从二维图像中检测和提取图像的特征。1.1OpenCV简介1.

OpenCV模块功能3D重建模块:包含了相机校准和三维重建相关的内容,例如基本的多视角几何算法、物体的姿态估计、三维信息重建等;对象检测模块:提供了对象检测功能,可以检测预定义的对象和实例,例如面部、眼睛、汽车等对象,同时可以在图像中给定图像的位置;机器模块:提供了很多的机器学习算法,例如K近邻(KNN)、K均值聚类(K-Means)、支持向量机(SVM)、神经网络等经典算法;计算摄影:通过图像处理技术来改善相机拍摄的图像、提供了与计算摄影有关的算法。1.1OpenCV简介2.OpenCV版本OpenCV于1999年由Intel公司的GrayBradiski启动,在2000年发布了第一个版本。2006.10OpenCV1.02009.9OpenCV2.02015.6OpenCV3.02018OpenCV4.02020.10OpenCV4.51.1OpenCV简介3.OpenCV-PythonOpenCV-Python:是OpenCV的Python语言接口优点:代码运行的速度与原始的C和C++的运行速度一样快使用Python编写代码更容易1.2开发环境配置开发环境的配置需要安装Python、Numpy包、OpenCV-Python包和vscode(教材上是PyCharm,两者均可)。1.Python安装登录官网/downloads/,下载Python安装包;选择Python版本时,请确保选择Python3.5或更高版本,本课程以Python3.8为例1.2开发环境配置1.Python安装运行安装程序,安装程序启动后,首先显示安装方式界面,勾选界面最下方的“AddtoPython3.8toPath”复选框;将Python3.8添加到系统的环境变量PATH中,这样可以保证在命令行提示符的窗口中,在任意路径下都可以执行Python的相关命令。选择“InstallNow”方式按默认设置安装安装完成后,在命令行提示符窗口中运行“Python”命令,如果安装正确,则可以进入Python的交互环境1.2开发环境配置2.Numpy安装配置pip源:在Windows的当前用户目录(一般是C:\Users\用户名)下,创建一个名为pip的文件夹;在pip文件夹下创建一个名为pip.ini的文件;安装Numpy:打开系统的命令行提示符窗口,在窗口中输入“pipinstallnumpy”命令并执行1.2开发环境配置3.OpenCV-Python安装方法1:pip方式安装在系统的命令行提示符窗口中输入“pipinstallopencv-python”;注意:安装过程中,pip会检查是否安装了Numpy包,如果没有安装,pip会自动安装Numpy包1.2开发环境配置3.OpenCV-Python安装方法2:安装预编译包确保系统中已经安装了Python(版本为3.5以上)和Numpy包;访问官网/,选择Library菜单下的Release选项,在页面中根据操作系统选择合适的版本,一般选择windows,下载OpenCV4.5.4的发布文件,文件名为opencv-4.5.4-vc14_v15.exe,将解压后的build\python\cv2\python-3.8路径中的cv2.cp38-win_amd64.pyd文件复制到Python安装路径下的“Lib\site-packages\cv2”路径中即可。1.2开发环境配置4.安装vscodeVSCode的全称为VisualStudioCode,是微软公司提供的一个免费的集成开发环境可以作Java、C、C#、PHP、Python等语言的开发环境访问VSCode官方主页:/在主页中,单击“DownloadforWindows”,下载安装程序;运行安装程序,默认安装即可安装完成后,启动VSCode创建一个Python文件,选择“File”菜单下的“NewFile”,将其以.py为扩展名进行命名,此时VSCode会提示用户安装Python扩展组件,选择install,即可完成扩展组件的安装1.3案例利用OpenCV读取图片文件创建名为“readImage.py”的Python文件,代码如下:第二章基础图像处理2.1图像处理图像的读取、显示与保存图像处理过程读取图像数据对图像进行相应处理操作查看处理后的结果(显示图像)保存图像2.1图像处理1.读取图像在对一副图像进行相应处理之前,需要将图像数据读取出来,读取操作完成后,可以将读取到的图像数据赋值给某个变量,对图像进行处理就通过对该变量进行操作来完成;方法:使用函数cv2.imread(),该函数支持各种静态图像格式,例如.bmp、.jpg、.png、.tif等图像格式语法格式:retval=cv2.imread(filename[,flags])2.1图像处理1.读取图像语法格式:retval=cv2.imread(filename[,flags])参数说明:retval是返回值,值为读取到的图像,如果没有读取到图像,则返回“None”filename表示要读取图像的完整文件名flag为读取标记,常用的参数如下:flag=-1:保持原格式不变flag=0:将图像调整为单通道的灰度图像flag=1:将图像调整为3通道的BGR图像,该值为默认值2.1图像处理应用实例1:使用cv2.imread()读取一副图像2.1图像处理2.显示图像图像处理完成后,通常情况下需要查看图像处理后的结果,需要将图像显示出来方法:函数cv2.imshow()语法格式:None=cv2.imshow(winname,mat)参数说明:winname:显示图像的窗口名称mat:为要显示的图像数据的变量2.1图像处理应用实例2:在一个窗口中显示读取的图像首先通过cv2.imread()函数读取图像lena.bmp,然后通过Window函数创建一个名为“lesson”的窗口最后通过cv2.imshow()函数在窗口lesson中显示lena.png图像2.1图像处理应用实例2:在一个窗口中显示读取的图像在实际应用过程中,可以不创建窗口,直接使用函数cv2.imshow()引用一个不存在的窗口,并在其中显示指定图像。这样cv2.imshow函数实际上会完成两步操作。注意:读取文件时,文件的名字和路径必须正确,否则就会出现错误error:(-215:Assertionfailed)size.width>0&&size.height>0infunction‘cv::imshow’文件的路径可以采用相对路径,也可以采用绝对路径,使用相对路径时要注意python的当前路径2.1图像处理waitKey()函数函数功能:用来等待按键,当用户按下键盘后,该语句会被执行,并获取返回值;语法格式:revtal=cv2.waitKey([delay])参数说明:retval表示返回值,如果没有按键被按下,则返回-1;如果有按键被按下,则返回按键的ASCII码;delay:表示等待键盘触发的时间,单位是ms,当该值为负值或者0时,表示无限等待,默认值为02.1图像处理waitKey()函数参数delay为表示等待键盘触发的时间,单位是msdelay=0时:程序会一直等待,直到按下键盘按键的时间发生,才会执行后续程序delay>0时:则在这个时间内等待按下键盘按键,当有键盘按下时间发生时,就继续执行后续的语句,如果一直没有这样的时间发生,即超过等待时间后,继续执行后续的语句2.1图像处理destroyWindow()函数函数功能:用来销毁或释放窗口;语法格式:None=cv2.destroyWindow(winname)参数说明:winname为窗口的名称在实际使用中,该函数通常和waitkey()函数配合使用实现窗口的释放2.1图像处理应用实例2:在一个窗口中显示读取的图像(完整代码)2.1图像处理destroyAllWindows()函数函数功能:用来释放(销毁)所有窗口;语法格式:None=cv2.destroyAllWindow()2.1图像处理3.保存图像图像处理完成后,通过显示图像查看处理后的效果,如果满意,此时需要将图像保存到磁盘上方法:函数cv2.imwrite()语法格式:retval=cv2.imwrite(filename,img[,params])参数说明:retval:返回值,如果保存成功,则返回逻辑值真(True);如果保存不成功,则返回逻辑假(false)filename:要保存的目标文件的完整路径名,包含文件的扩展名img:是被保存图像的变量名params是保存类型参数,是可选的,该参数针对特定的格式,对于jpg图像,该参数表示的是图像的质量,用0-100的整数表示,默认值为95;对于png图像,该参数表示的是压缩级别,默认值为32.1图像处理应用实例3:将读取到的图像保存在当前目录下程序运行完成后,在当前目录下,会出现result.bmp文件2.2视频处理视频是非常重要的视觉信息来源,是计算机视觉处理过程中非常重要的也是经常要处理的一类信号;视频实际上是有一系列图像构成的,这一系列图像被称为帧;视频播放时,以一定的速率显示每一帧,称为帧速率,单位是帧/秒,表示一秒内所出现的帧数,对应的英文是FPS(FramesPerSecond);如果能够从视频获取每一帧,就可以使用图像处理的方法对其进行处理,来达到视频处理的目的;OpenCV中的VideoCapture类和VideoWriter类提供了视频处理功能2.2视频处理1.读取视频方法:使用VideoCapture对象的read方法,获取视频中的帧,每一帧都是一副图像,该方法的返回值为两个,分别为帧标记和每一帧的图像数据。应用实例1:编写程序,读取当前目录下的视频文件video.mp42.2视频处理2.播放视频方法:OpenCV播放视频实际上是逐帧读取视频和显示每一帧的图像。应用实例2:编写程序,读取当前目录下的视频文件video.mp4并播放该视频2.2视频处理2.播放视频计算机视觉要处理的对象更多的时候是从摄像设备中实时读入的视频流方法:video=cv2.VideoCapture(0)代码表示从摄像头录入的视频作为数据源创建VideoCapture对象,此时程序运行结果为播放的视频是从摄像头实时录入的内容。2.3图像属性使用imread()函数读入图像时,对于RGB彩色图像来说,会按照图像行的方向依次读取图像B通道、G通道和R通道的像素点,并将像素点以行为单位存储在ndarray的列中M行N列的RGB图像的存储形式如图:2.3图像属性在图像处理的过程中,经常需要获取图像的属性,常用的属性如下:shape:如果是彩色图像,则返回包含行数、列数、通道数的数组,如果是灰度图像或二值图像,则仅返回行数和列数。通过该属性的返回值是否包含通道数,可以判断一副图像是彩色图像还是灰度图像(或二值图像)size:返回图像的像素数目,其值为“行*列*通道数”灰度图像或二值图像的通道数为1dtype:返回图像像素值的数据类型2.3图像属性应用案例1:编写程序,观察图像的常用属性2.4灰度处理计算机将图像的灰度共有256级,即0-255,其中0表示黑色,255表示白色,中间的数值为黑色到白色的过度颜色;计算机使用一个字节来存储一个像素值OpenCV在表示一副灰度图像(黑白图像)时,使用单通道的二维数组来表示2.4灰度处理应用实例1:生成一副灰度图像,图像中的像素值为随机生成2.4灰度处理应用实例2:编写程序,读取当前目录下的lena.png图像,并将其转换为灰度图像2.5通道操作RGB图像中,图像是由R通道、G通道、B通道三个通道构成的,在OpenCV中,通道是按照B通道->G通道->R通道存储的在图像处理过程中,可以根据需要对通道进行拆分和合并1.通道拆分针对RGB图像,可以拆分成R通道、G通道、B通道方法:通过索引方式拆分通道通过函数方式拆分通道(split函数)2.5通道操作通过索引方式拆分通道应用案例1:编写程序,演示图像通道拆分及通道值改变对彩色图像的影响2.5通道操作通过函数方式拆分通道函数cv2.split()能够拆分图像的通道,使用方法如下:b,g,r=cv2.split(img)上述语句与如下语句是等价的b=cv2.split(img)[0]g=cv2.split(img)[1]r=cv2.split(img)[2]2.5通道操作应用案例2:编写程序,使用函数cv2.split()拆分图像通道2.5通道操作2.通道合并通道合并是通道拆分的逆过程,通过合并通道可以将三个通道的灰度图像构成一副彩色图像方法:使用函数cv2.merge()语句:bgr=cv2.merge([b,g,r])2.5通道操作2.通道合并应用实例3:编写程序,lena.png图像进行通道拆分,然后,分别按照r通道、g通道、b通道的顺序和g通道、r通道、b通道的顺序进行合并2.6感兴趣区域(ROI)在图像处理的过程中,通常会对图像中的某个区域比较感兴趣,则这个区域被称为感兴趣区域(RegionofInterest,ROI)。设定ROI后,可以对该区域进行整体操作。例如,将一个感兴趣区域A赋值给变量B,然后将变量B赋值给另一个区域C,从而达到在区域C内复制区域A的目的。举例:如左图,假设当前图像名称为img,图中数字分别表示行号和列号,则图中黑色ROI可以表示为img[200:400,200:400]语句:将黑色的ROI复制到该区域的右侧a=img[200:400,200:400]img[200:400,600:800]=a2.6感兴趣区域(ROI)应用实例1:获取图像lena的头部信息,并将其显示出来2.6感兴趣区域(ROI)应用实例2:为lena.png图片打码,使用矩形遮住图片中人物的眼部,矩形中的像素值为随机生成2.6感兴趣区域(ROI)应用实例3:编写程序,将一副图像中ROI赋值到另一幅图像2.7图像运算图像运算是图像处理中的一种基础操作,是指以图像为单位进行操作,即图像中所有的像素都参与运算,得到的结果是一副与原来灰度分布不同的新图像图形运算主要包括算术运算和位运算算术运算是指对两幅或两幅以上的图像对应像素的灰度值做加法、减法、乘法或除法等运算本节中以算数运算中的加法运算为例进行介绍2.7图像运算1.加法运算方法:通过运算符“+”对图像进行加法运算通过函数cv2.add()函数对图像进行加法运算运算规则:运算符“+”对图像进行加法运算图像a和图像b进行求和运算时,规则如下:如果两个图像对应像素值的和小于或等于255,则直接相加得到运算结果,例如,像素值28和像素值36,得到计算结果57。如果两个图像对应的像素值的和大于255,则将运算结果对256取模,例如255+58=313,大于255,则计算(255+58)%256=57,得到计算结果为57。因此上面的公式可以简化为a+b=mod(a+b,256)2.7图像运算1.加法运算应用实例1:使用随机数数组模拟灰度图像,观察使用“+”对像素值求和的结果注意:要保证数组中的元素的数据类型是uint8,这样相加的结果才能对256做取模运算。2.7图像运算1.加法运算cv2.add()函数计算规则如下:如果两个像素值的和小于或等于255,则直接相加得到运算结果,例如像素值28和像素值36相加,得到计算结果64。如果两个像素值的和大于255,则将运算结果处理为饱和值255,例如255+58=313,大于255,则得到计算结果255。使用方法:形式1:计算结果=cv2.add(图像1,图像2),函数的两个参数都是图像,此时参与运算的图像大小和类型必须一致形式2:计算结果=cv2.add(数值,图像),第1个参数是数值,第2个参数是图像,此时将超过图像饱和值的数值处理为饱和值形式2:计算结果=cv2.add(图像,数值),第1个参数是图像,第2个参数是数值,此时将超过图像饱和值的数值处理为饱和值2.7图像运算1.加法运算应用实例2:使用随机数数组模拟灰度图像,使用“cv2.add()”函数相加观察结果2.7图像运算1.加法运算应用实例3:分别使用加号运算符和函数cv2.add()函数计算两幅灰度图像的像素值之和,观察处理结果分析:使用加号运算符计算时,将和大于255的值进行取模处理,取模后大于255的这部分值变小了,导致本来应该更亮的像素点变得暗了,相加所得得图像看起来并不自然。使用函数cv2.add()函数计算时,将和大于255的值处理为饱和值255,图像像素值相加后,让图像的像素值增加了,图像整体变亮。2.7图像运算2.图像加权和图像加权和:计算两幅图像的像素值之和时,将每幅图像的权重考虑进来,可以使用公式表示:saturate()表示取饱和值(最大值)图像进行加权和计算时,src1和src2必须大小、类型相同,它们可以是任意数据类型,也可以有任意数量的通道数(灰度图像或彩色图像),只要二者相同即可。OpenCV中,函数cv2.addWeighted(),用来实现图像的加权和,语法格式为:dst=cv2.addWeighted(src1,alpha,src2,beta,gamma)Alpha和beta是图像src1和src2所对应的系数(权重),它们的和可以等于1也可以不等于1,参数gamma,可以为0,但是该参数是必选参数,不能省略。可以将图像加权和的式子理解为:结果图像=图像1*系数1+图像2*系数2+亮度调节2.7图像运算2.图像加权和应用实例1:使用数组演示函数cv2.addWeighted()的使用应用实例2:使用函数cv2.addWeight()对两幅图像进行加权混合,观察处理结果2.7图像运算2.图像加权和练习:使用函数cv2.addWeight()将一副图像的ROI混合在另外一副图像中,结果如图所示2.7图像运算3.位运算位运算是指按位运算,即将要进行运算的两个操作数转换成二进制数,然后按位对齐进行运算。位运算包括四种运算方式,分别是按位与运算、按位或运算、按位非运算和按位异或运算。计算规则如下:

按位与运算按位或运算按位异或运算按位非运算操作数111000100110001001100010011000100操作数2110110101101101011011010

结果110000001101111000011110001110112.7图像运算3.位运算-按位与运算按位与运算是指将数值转换为二进制后,在对应的位置上进行与运算,如下表所示方法:cv2.bitwise_and()函数语法格式:dst=cv2.bitwise_and(src1,src2[,mask])dst表示与输入值具有同样大小的array输出值src1表示第一个array或scalar类型的输入值src2表示第二个array或scalar类型的输入值mask表示可选操作掩码,8为单通道array数值十进制数二进制数数值119811000110数值221911011011按位与运算结果194110000102.7图像运算3.位运算-按位与运算特点:将任何数值N与数值0进行按位操作,都会得到数值0将任何数值N(这里仅考虑8位值)与数值255(8位二进制数是11111111)进行按位操作,都会得到数值N本身。根据以上特点,可以构造一副掩膜图像M,掩膜图像M中只有两个值,0和255,将掩膜图像M与一副灰度图像G进行按位与操作,在结果图R中:与掩膜图像M中的数值255对应位置上的值,来源于灰度图像G与掩膜图像M中的数值0对应位置上的值位0(黑色)按位与运算二进制值十进制值二进制值十进制值数值N1101101121911011011219特殊值(0及255)00000000011111111255运算结果00000000011011011219说明数值219与数值0按位与得到0数值219与数值255按位与,结果保持自身值219不变2.7图像运算3.位运算-按位与运算应用案例1:使用数组演示与掩膜图像的按位与运算2.7图像运算3.位运算-按位与运算应用案例2:构造一个掩膜图像,使用与运算保留图像中被掩膜指定的部分注意:也可以对彩色图像进行掩膜处理2.7图像运算3.位运算-按位与运算应用案例2:构造一个掩膜图像,使用与运算保留彩色图像中被掩膜指定的部分2.7图像运算4.位运算-按位或运算按位或运算是指将数值转换为二进制后,在对应的位置上进行与运算,如下表所示方法:cv2.bitwise_or()函数语法格式:dst=cv2.bitwise_or(src1,src2[,mask])dst表示与输入值具有同样大小的array输出值src1表示第一个array或scalar类型的输入值src2表示第二个array或scalar类型的输入值mask表示可选操作掩码,8为单通道array数值十进制数二进制数数值119811000110数值221911011011按位或运算结果223110111112.7图像运算4.位运算-按位或运算特点:将任何数值N与数值0进行按位操作,结果为数值N将任何数值N(这里仅考虑8位值)与数值255(8位二进制数是11111111)进行按位或操作,结果为255。按位或运算二进制值十进制值二进制值十进制值数值N1101101121911011011219特殊值(0及255)00000000011111111255运算结果1101101121911111111255说明数值219与数值0按位或,结果保持自身值219不变数值219与数值255按位或,结果为2552.7图像运算5.位运算-按位异或运算按位异或运算是指将数值转换为二进制后,在对应的位置上进行与运算,如下表所示方法:cv2.bitwise_xor()函数语法格式:dst=cv2.bitwise_xor(src1,src2[,mask])dst表示与输入值具有同样大小的array输出值src1表示第一个array或scalar类型的输入值src2表示第二个array或scalar类型的输入值mask表示可选操作掩码,8为单通道array数值十进制数二进制数数值119811000110数值221911011011按位异或运算结果29000111012.7图像运算5.位运算-按位异或运算特点:将任何数值N与数值0进行按位操作,结果为数值N将任何数值N(这里仅考虑8位值)与数值255(8位二进制数是11111111)进行按位或操作,结果为255。按位或运算二进制值十进制值二进制值十进制值数值N1101101121911011011219特殊值(0及255)00000000011111111255运算结果110110112190010010036说明数值219与数值0按位或,结果保持自身值219不变数值219与数值255按位或,结果为对N取反2.7图像运算应用案例1:编写程序,对两幅图像进行按位运算2.7图像运算6.掩膜

OpenCV中很多函数都会指定一个掩膜,也被称为掩码,例如:计算结果=cv2.add(参数1,参数2,掩模)当使用掩模参数时,操作只会在掩模值为非空的像素点上执行,并将其他像素点的值置为0举例:img1,img2,mask和img3的原始值为:经过img3=cv2.add(img1,img2,mask=mask)运算后,得到img3为:2.7图像运算6.掩膜

应用案例1:掩膜的使用2.7图像运算6.掩膜

位运算的函数中也包含掩模参数彩色图像中,以按位与运算为例,为了实现将彩色图像与掩模图像进行计算,由于按位与运算要求参与运算的数据要具有相同的通道数,所以无法直接将彩色图像与单通道的掩模图像进行按位与运算,我们通过将掩模图像转换为BGR模式的彩色图像,让彩色图像与掩模图像进行按位与运算,从而实现掩模操作。另一种方法,使用掩模参数,该参数时8位单通道的图像,所以可以将掩模图像作为按位与函数cv2.bitwise_and(src1,src2[,[mask]])中参数mask值,完成掩模运算。此时,让待处理的彩色图像同时作为该函数的参数src1和src2,完成按位与运算,即可得到由掩模控制的彩色图像。2.7图像运算6.掩膜

应用案例2:构造一个掩模图像,将该掩模图像作为按位与函数的掩模参数,实现保留图像的指定部分2.8

案例案例2:编写程序,针对图像中的某个区域做处理图像处理过程中,某些情况下,希望对图像的局部区域做处理,其他区域保持不变,此时需要提取这个需要处理的特定区域,即ROI区域,对这个特定区域处理完成后,在重新赋值给该图像的这个区域2.8案例案例3:图像掩模处理,通过掩模获取图像中的某个区域掩模图像由黑色和白色两种颜色构成,并且掩模图像为单通道图像图像通过掩模可将感兴趣的区域获取出来第三章图像绘制第三章图像绘制OpenCV提供了绘制线段、椭圆、多边形等图形的功能OpenCV通过鼠标事件、利用鼠标事件识别鼠标操作实现与图像的交互功能OpenCV图形绘制的步骤如下:绘制画布画布布局绘制图形展示图形保存图像3.1绘制线段与箭头线1.绘制线段方法:函数cv2.line()语法格式:cv2.line(img,pt1,pt2,color[,thickness[,lineType[,shift]]])参数说明:img为用于绘制图像的图像。pt1为直线段的起点坐标。pt2为直线段的终点坐标。color为线条的颜色。通常使用BGR模型表示颜色,如(255,0,0)表示蓝色。thickness表示线条粗细。默认值为1,设置为-1时表示绘制填充图形(绘制直线时,不能设置为-1)。3.1绘制线段与箭头线1.绘制线段lineType表示线条类型,默认值为cv2.Line_8。线条类型可设置常量如表所示。shift表示坐标的数值精度,一般情况下不需要设置。注意:参数中img、pt1、pt2、color为必须参数,其它为可选项。线条类型参数说明cv2.FILLED填充cv2.LINE_44连接类型cv2.LINE_88连接类型cv2.LINE_AA抗锯齿,该参数会让线条更平滑3.1绘制基本图形1.绘制线段应用实例1:在给定的画布上绘制线段3.1绘制基本图形2.绘制箭头线方法:函数cv2.arrowedLine()语法格式:cv2.arrowedLine(img,pt1,pt2,color[,thickness[,line_type[,shift[,tipLength]]]])参数说明:img:要画的直线所在的图像,也称为画布。。pt1:直线的起点位置,是一个坐标点,类似(X,Y)这样。pt2:直线的终点位置,是一个坐标点,类似(X,Y)这样。color为线条的颜色。通常使用BGR模型表示颜色,如(255,0,0)表示蓝色。thickness表示线条粗细。默认值为1,设置为-1时表示绘制填充图形(绘制直线时,不能设置为-1)。3.1绘制基本图形2.绘制箭头线lineType表示线条类型,默认值为cv2.Line_8。线条类型可设置常量如表所示。shift表示坐标的数值精度,一般情况下不需要设置。tipLength表示箭头因数,即箭头尖端的长度相对线段的长度为比例多少注意:参数中img、pt1、pt2、color为必须参数,其它为可选项。线条类型参数说明cv2.FILLED填充cv2.LINE_44连接类型cv2.LINE_88连接类型cv2.LINE_AA抗锯齿,该参数会让线条更平滑3.1绘制基本图形2.绘制箭头线应用实例1:绘制带有箭头的线段3.1绘制基本图形2.绘制箭头线练习:绘制交通标志,如图,画布大小为300*200,画布颜色为(110,0,0)3.1绘制基本图形3.绘制矩形方法:函数cv2.rectangle()语法格式:cv2.rectangle(img,pt1,pt2,color[,thickness[,lineType[,shift]]])参数说明:img:要画的矩形所在的图像,也称为画布。pt1:矩形左上角的位置,是一个坐标点,类似(X,Y)这样。pt2:矩形右下角的位置,是一个坐标点,类似(X,Y)这样。color为线条的颜色。通常使用BGR模型表示颜色,如(255,0,0)表示蓝色。thickness表示线条粗细。默认值为1,设置为-1时表示绘制填充图形(绘制直线时,不能设置为-1)。3.1绘制基本图形3.绘制矩形lineType表示线条类型,默认值为cv2.Line_8。线条类型可设置常量如表所示。shift表示坐标的数值精度,一般情况下不需要设置。注意:参数中img、pt1、pt2、color为必须参数,其它为可选项。线条类型参数说明cv2.FILLED填充cv2.LINE_44连接类型cv2.LINE_88连接类型cv2.LINE_AA抗锯齿,该参数会让线条更平滑3.1绘制基本图形3.绘制矩形应用实例1:在给定的画布上绘制矩形3.1绘制基本图形4.绘制填充图形方法:函数cv2.fillConvexPoly()语法格式:cv2.fillConvexPoly(img,points,color[,lineType[,shift]])参数说明:img:要画的直线所在的图像,也称为画布。points:多边形点坐标数组color为填充的颜色。通常使用BGR模型表示颜色,如(255,0,0)表示蓝色。3.1绘制基本图形4.绘制填充图形lineType表示线条类型,默认值为cv2.Line_8。线条类型可设置常量如表所示。shift表示坐标的数值精度,一般情况下不需要设置。注意:参数中img、points、color为必须参数,其它为可选项。线条类型参数说明cv2.FILLED填充cv2.LINE_44连接类型cv2.LINE_88连接类型cv2.LINE_AA抗锯齿,该参数会让线条更平滑3.1绘制基本图形4.绘制填充图形应用实例1:绘制房屋的简笔画3.1绘制基本图形5.绘制圆形方法:函数cv2.circle()语法格式:cv2.circle(img,center,radius,color[,thickness[,lineType[,shift]]])参数说明:img:要画的直线所在的图像,也称为画布。center:圆心坐标radius:圆的半径color为线条的颜色。通常使用BGR模型表示颜色,如(255,0,0)表示蓝色。thickness表示线条粗细。默认值为1,设置为-1时表示绘制填充图形(绘制直线时,不能设置为-1)。3.1绘制基本图形5.绘制圆形lineType表示线条类型,默认值为cv2.Line_8。线条类型可设置常量如表所示。shift表示坐标的数值精度,一般情况下不需要设置。注意:参数中img、center、radius、color为必须参数,其它为可选项。线条类型参数说明cv2.FILLED填充cv2.LINE_44连接类型cv2.LINE_88连接类型cv2.LINE_AA抗锯齿,该参数会让线条更平滑3.1绘制基本图形5.绘制圆形应用实例1:在给定的画布上绘制圆形图形3.1绘制基本图形5.绘制圆形练习1:绘制奥运五环标志3.1绘制基本图形6.绘制椭圆方法:函数cv2.ellipse()语法格式:cv2.ellipse(img,center,axes,rotateAngle,startAngle,endAngle,color[,thickness[,lineType[,shift]]])参数说明:img:要画的直线所在的图像,也称为画布。center:椭圆的圆心坐标axes:椭圆的长轴和短轴的长度,数据类型为元组rotateAngle:椭圆旋转的角度startAngle:椭圆弧的起始角度endAngle:椭圆弧的终止角度3.1绘制基本图形6.绘制椭圆color为线条的颜色。通常使用BGR模型表示颜色,如(255,0,0)表示蓝色。thickness表示线条粗细。默认值为1,设置为-1时表示绘制填充图形(绘制直线时,不能设置为-1)。lineType表示线条类型,默认值为cv2.Line_8。线条类型可设置常量如表所示。shift表示坐标的数值精度,一般情况下不需要设置。注意:img,center,axes,rotateAngle,startAngle,endAngle,color为必须参数,其它为可选项。线条类型参数说明cv2.FILLED填充cv2.LINE_44连接类型cv2.LINE_88连接类型cv2.LINE_AA抗锯齿,该参数会让线条更平滑3.1绘制基本图形6.绘制椭圆应用实例1:在给定的画布上绘制椭圆图形3.1绘制基本图形7.绘制多边形方法:函数cv2.polylines()语法格式:cv2.polylines(img,pts,isClosed,color[,thickness[,lineType[,shift]]])参数说明:img:要画的直线所在的图像,也称为画布。pts:多边形各边的坐标点组成的一个列表,是一个numpy的数组类型isClosed:为True时,绘制封闭多边形;否则,依次连接各个顶点,绘制一条曲线color为线条的颜色。通常使用BGR模型表示颜色,如(255,0,0)表示蓝色。thickness表示线条粗细。默认值为1,设置为-1时表示绘制填充图形(绘制直线时,不能设置为-1)。3.1绘制基本图形7.绘制多边形lineType表示线条类型,默认值为cv2.Line_8。线条类型可设置常量如表所示。shift表示坐标的数值精度,一般情况下不需要设置。注意:img,pts,isClosed,color为必须参数,其它参数为可选项线条类型参数说明cv2.FILLED填充cv2.LINE_44连接类型cv2.LINE_88连接类型cv2.LINE_AA抗锯齿,该参数会让线条更平滑3.1绘制基本图形7.绘制多边形应用实例1:在指定的画布上绘制多边形图形3.2添加文字与其他绘图函数1.添加文字方法:函数cv2.putText()语法格式:cv2.putText(img,text,org,fontFace,fontScale,color[,thickness[,lineType[,bottomLeftOrigin]]])参数说明:img:要画的直线所在的图像,也称为画布。text:文字内容org:文本左下角的位置3.2添加文字与其他绘图函数1.添加文字fontFace:字体类型,可选参数值如下,上述类型的字体可以结合FONT_HERSHEY_ITALIC一起来使用,使字体产生斜体效果。值含义cv.FONT_HERSHEY_SIMPLEX正常大小的sans-serif字体cv.FONT_HERSHEY_PLAIN小号sans-serif字体cv.FONT_HERSHEY_DUPLEX正常大小的sans-serif字体(比FONT_HERSHEY_SIMPLEX更复杂)cv.FONT_HERSHEY_COMPLEX正常大小的serif字体cv.FONT_HERSHEY_TRIPLEX正常大小的serif字体(比FONT_HERSHEY_COMPLEX更复杂)cv.FONT_HERSHEY_COMPLEX_SMALLFONT_HERSHEY_COMPLEX字体简化版cv.FONT_HERSHEY_SCRIPT_SIMPLEX手写风格的字体cv.FONT_HERSHEY_SCRIPT_COMPLEXFONT_HERSHEY_SCRIPT_SIMPLEX字体的进阶版cv.FONT_ITALIC斜体标记3.2添加文字与其他绘图函数1.添加文字fontScale:缩放比例,用该值乘以程序字体默认大小即为字体大小color:字体颜色,颜色值为BGR,即:(0,0,255)为红色thickness:字体线条宽度lineType:表示线条类型,默认值为cv2.Line_8,线条类型可设置常量如表所示bottomLeftOrigin:为文本方向,默认值为False;设置为True时,文本为垂直镜像效果。线条类型参数说明cv2.FILLED填充cv2.LINE_44连接类型cv2.LINE_88连接类型cv2.LINE_AA抗锯齿,该参数会让线条更平滑3.2添加文字与其他绘图函数1.添加文字绘制中文字体使用cv2.putText()函数绘制中文字体时会出现乱码,解决方案如下:(1)Python+OpenCV+FreeType(2)Python+OpenCV+PIL使用方案(2)解决该问题,使用PIL实现中文的输出,具体方法如下:OpenCV图片格式转换成PIL的图片格式;使用PIL绘制文字;PIL图片格式转换成OpenCV的图片格式;3.2添加文字与其他绘图函数1.添加文字应用案例1:在指定的画布上添加国庆、中秋宣传语3.2添加文字与其他绘图函数2.其他绘图函数函数cv2.drawMarker():作用:绘制指定的标记语法格式:cv2.drawMarker(img,position,color[,markerType[,markerSize[,thickness[,line_type]]]])参数说明:img:标记所在的矩形或图像position:坐标,是一个包含两个数字的tuple(必需是tuple),表示(x,y)color:颜色,是一个包含三个数字的tuple或list,表示(b,g,r)3.2添加文字与其他绘图函数2.其他绘图函数markerType:点的类型。取值0-6,有相应的宏定义与之对应,如下表所示。数值宏定义说明0cv2.MARKER_CROSS十字线(横竖两根线)1cv2.MARKER_TILTED_CROSS交叉线(斜着两根线)2cv2.MARKER_STAR米字线(横竖加斜着共四根线)3cv2.MARKER_DIAMOND旋转45度的正方形4cv2.MARKER_SQUARE正方形5cv2.MARKER_TRIANGLE_UP尖角向上的三角形6cv2.MARKER_TRIANGLE_DOWN尖角向下的三角形3.2添加文字与其他绘图函数2.其他绘图函数markerSize:点的大小。大于0的整数,必需是整数。实际输入<=0的数字也可,但是估计程序里有判断,<=0等同于1。默认值是20。thickness:点的线宽。必需是大于0的整数,必需是整数,不能小于0,默认值是1。lineType表示线条类型,默认值为cv2.Line_8。线条类型可设置常量如表所示。线条类型参数说明cv2.FILLED填充cv2.LINE_44连接类型cv2.LINE_88连接类型cv2.LINE_AA抗锯齿,该参数会让线条更平滑3.2添加文字与其他绘图函数2.其他绘图函数应用案例1:在指定画布上绘制标记3.3鼠标交互操作1.鼠标相应事件OpenCV可在用户触发鼠标事件时,调用鼠标回调函数完成事件处理。方法:首定义鼠标回调函数使用setMouseCallback函数为图像窗口绑定鼠标回调函数定义鼠标回调函数:该函数中定义了当触发鼠标事件时,应该完成哪些事情基本格式:defmouseCallback(event,x,y,flags,param):…参数说明:mouseCallback为自定义函数名称。x和y为触发鼠标事件时,鼠标指针在窗口中的坐标(x,y)。3.3鼠标交互操作1.鼠标响应事件event为调用时传递给函数的鼠标事件对象,可能的取值为Event对应值含义cv2.EVENT_LBUTTONDBLCLK7左键双击cv2.EVENT_LBUTTONDOWN1左键按下cv2.EVENT_LBUTTONUP4左键释放cv2.EVENT_MBUTTONDBLCLK9中键双击cv2.EVENT_MBUTTONDOWN3中键按下cv2.EVENT_MBUTTONUP6中键释放cv2.EVENT_MOUSEHWHEEL11横向滚轮滚动cv2.EVENT_MOUSEMOVE0鼠标移动cv2.EVENT_MOUSEWHEEL10滚轮滚动cv2.EVENT_RBUTTONDBLCLK8右键双击cv2.EVENT_RBUTTONDOWN2右键按下cv2.EVENT_RBUTTONUP5右键释放3.3鼠标交互操作1.鼠标响应事件flags:记录了一些专门的操作,可能的取值为:flags对应值含义cv2.EVENT_FLAG_ALTKEY32按Alt不放cv2.EVENT_FLAG_CTRLKEY8按Ctrl不放cv2.EVENT_FLAG_LBUTTON1左键拖拽cv2.EVENT_FLAG_MBUTTON4中键拖拽cv2.EVENT_FLAG_RBUTTON2右键拖拽cv2.EVENT_FLAG_SHIFTKEY16按住Shift不放3.3鼠标交互操作1.鼠标响应事件cv2.setMouseCallback()函数基本格式:cv2.setMouseCallback(wname,mouseCallback)参数说明:wname:图像窗口的名称。mouseCallback:鼠标回调函数名称。3.3鼠标交互操作1.鼠标响应事件应用案例1:单击鼠标左键绘制十字线分析:首先编写鼠标事件的回调函数,函数内容为当发生鼠标左键按下事件时,在窗口中绘制“十字”,颜色为红色;使用cv2.namdWindow定义窗口;将鼠标回调函数与窗口进行绑定。3.3鼠标交互操作1.鼠标响应事件应用案例2:在图像上用鼠标点击左键拖拽画一矩形,并输出矩形信息3.3鼠标交互操作1.鼠标响应事件应用案例2:在图像上用鼠标点击左键拖拽画一矩形,输入字母m,切换模式,用鼠标单击左键拖拽画圆形3.3鼠标交互操作2.跟踪栏跟踪栏(Trackbar)是OpenCV动态调节参数特别好用的一种工具,比如边缘检测,阈值化,对比度和亮度调节等;在规定窗口显示,并调节参数控制显示图像;依附于窗口而存在方法:使用cv2.createTrackbar()函数创建跟踪栏使用getTrackbarPos()函数获取跟踪栏数据cv2.createTrackbar()函数使用格式:cv2.createTrackbar(trackbarname,wname,value,count,onChange,userdata)参数说明:trackbarname:跟踪栏的名称3.3鼠标交互操作2.跟踪栏wname:图像窗口的名称。value:跟踪栏中滑块的初始位置。count:跟踪栏的最大值,最小值为0。onChange:跟踪栏滑块位置变化时调用的回调函数名称userdata为传递给回调函数的其他可选数据。获取跟踪栏的当前值getTrackbarPos()函数基本格式:retval=cv2.getTrackbarPos(trackbarname,wname)3.3鼠标交互操作2.跟踪栏参数说明:trackbarname为跟踪栏的名称。wname为图像窗口的名称。retval为返回值3.3鼠标交互操作2.跟踪栏应用实例1:利用跟踪条控制图像的亮度和对比度3.4案例案例1:单击鼠标左键在图像中绘制矩形,并标注矩形的长宽数值过程:鼠标单击并拖动后绘制矩形根据绘制点的坐标计算图形的长度和宽度并显示分析:编写绘制矩形的回调函数,当鼠标按下时,获取鼠标的位置坐标,当鼠标抬起时,在画板上绘制矩形,通过鼠标的位置坐标与上次所获取的鼠标位置坐标相减可以得到矩形的长度和宽度,利用cv2.putText函数将矩形的长度和宽度显示在画布上注意:程序运行后,每次绘制矩形时都是在空白的画布上绘制的,因此,上一次绘制的矩形会消失。3.4案例案例1:单击鼠标左键在图像中绘制矩形,并标注矩形的长宽数值3.4案例案例2:利用OpenCV+Python实现鼠标点击图像,输出该点的RGB和HSV值过程:当按下鼠标左键时会显示图像的BGR值和HSV值HSV是一种颜色空间,可以用一个圆锥来表示,HSV表示色相(hue)、饱和度(saturation)和亮度(value)。H表示颜色的相位角(hue),取值范围是0到360度;S表示颜色的饱和度(saturation),范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率;V表示色彩的明亮程度(value),范围从0到1。3.4案例案例2:利用OpenCV+Python实现鼠标点击图像,输出该点的RGB和HSV值分析:读入图像将图像转换成HSV颜色空间分别显示BGR图像和HSV图像当鼠标单击BGR图像时,显示鼠标点的BGR值,当输入单击HSV图像时,显示鼠标点的HSV值需要编写两个颜色空间的回调函数,当单击图像时,显示对应的BRG值或者HSV值3.4案例案例2:利用OpenCV+Python实现鼠标点击图像,输出该点的RGB和HSV值第四章图像变换第四章图像变换图像变换:将原定义在图像空间的图像以某种形式转换到另外的空间,利用空间的特有性质方便地进行一定的加工,最后再转换回图像空间以得到所需的效果。图像变换算法可以分为四种:空域变换等维度算法:空域变换变维度算法值域变换等维度算法值域变换变维度算法空域变换主要指图像在几何上的变换,而值域变换主要指图像在像素值上的变换等维度变换是在相同的维度空间中,而变维度变换是在不同的维度空间中,例如二维到三维,灰度空间到彩色空间4.1色彩空间变换色彩空间:自然界中常见的各种色光都可以通过将三基色(红、绿、蓝)按照一定的比例混合构成从光学角度出发,可以将颜色解析为主波长,纯度,明度等从心理学和视觉角度出发,可以将颜色解析为色调、饱和度、亮度等将上述采用不同的方式表述颜色的模式称为色彩空间,或者颜色空间、颜色模式常见的色彩空间:RGB、GRAY(灰度图像)、YCrCb、HSV、HLS、HIS、CMY、YUV等色彩空间转换:将图像从一个色彩空间转换到另一个色彩空间,每种色彩空间都其擅长的解决问题的领域,因此在解决色彩问题时,需要进行色彩空间的转换。4.1色彩空间变换常用的色彩空间:RGB:最常用的是面向硬件的颜色空间,该空间经常用于屏幕显示和视频输出HSI(色调、饱和度、强度):是一种更符合人描述和解释颜色的一种模型HSV(色调、饱和度、亮度):不适合显示器系统,但是更符合人眼的视觉特性Lab(亮度、颜色通道a、b):弥补了RGB和CMYK两种色彩模式的不足,是一种设备无关的颜色模型,也是一种基于生理特征的颜色模型CMY(青、洋红、黄)和CMYK(青、洋红、黄、黑):是针对彩色打印机的GRAY:通常指的是灰度图像,具有256个灰度级,像素值的范围是0~255YUV:Y”表示明亮度,也就是灰阶值,“U”和“V”表示的则是色度,作用是描述影像色彩及饱和度,用于指定像素的颜色,用于优化彩色视频信号的传输YCrCb:由YUV彩色空间派生的一种颜色空间,主要用于数字电视系统,Y代表光源的亮度,色度信息保存在Cr和Cb中,Cr表示红色分量信息,Cb表示蓝色分量信息4.1色彩空间变换1.RGB色彩空间RGB色彩空间使用R(Red,红)、G(Green,绿)和B(Blue,蓝)3种基本颜色表示图像像素。RGB色彩空间中,图像的每个像素用一个三元组表示,三元组中的3个值依次表示红色、绿色和蓝色,依次对应R、G和B通道。颜色样式RGB数值颜色代码白色255,255,255#FFFFFF黑色0,0,0#000000红色255,0,0#FF0000黄色255,255,0#FFFF00绿色0,255,0#00FF00蓝色0,0,255#0000FF紫色(深红)255.0.255#FF00FF青色0,255,255#00FFFF橘黄255,128,0#FF80004.1色彩空间变换1.RGB色彩空间OpenCV默认采用BGR色彩空间,它按B、G和R通道顺序表示图像。在cv2.cvtColor()函数中使用参数cv2.COLOR_BGR2RGB转换码可将图像从BGR色彩空间转换为RGB色彩空间4.1色彩空间变换2.GRAY色彩空间GRAY色彩空间通常指8位灰度图像,其颜色取值范围为[0,255],共256个灰度级,"255"表示纯白色,数值“0”表示纯黑色。8位灰度表示每个像素采用8位来保存,如果使用16位来保存,则共有65536个灰度级彩色图像转为灰度图像的几种方法: 浮点算法:Gray=R×0.3+G×0.59+B×0.11 整数方法:Gray=(R×30+G×59+B×11)/100 移位方法:Gray=(R×28+G×151+B×77)≫8 平均值法:Gray=(R+G+B)/3 仅取绿色:Gray=G4.1色彩空间变换2.GRAY色彩空间OpenCV中使用cv2.cvtColor()函数可将BGR色彩空间转换位GRAY4.1色彩空间变换3.YCrCb色彩空间YCrCb色彩系统是从YUV色彩系统衍生出来的,是一种基于人眼感知的颜色空间,被广泛的应用在电视的色彩显示等领域中。Y表示明亮度(Luminance或Luma),Cr表示颜色的色调,Cb表示饱和度。YCrCb与RGB可以相互转换(RGB取值范围均为0255),转换公式为:4.1色彩空间变换3.YCrCb色彩空间在cv2.cvtColor()函数中使用参数cv2.COLOR_BGR2YCrCb转换码可将图像从BGR色彩空间转换为YCrCb色彩空间,示例代码如下:4.1色彩空间变换4.HSV色彩空间RGB是从硬件的角度提出的颜色模型,在与人眼匹配的过程中可能存在一定的差异,HSV色彩空间是一种面向视觉感知的颜色模型。HSV指出人眼的色彩知觉主要包括三要素:色调(Hue,也称为色相)、饱和度(Saturation)、亮度(Value)。色调:光的颜色,与光的波长有关,不同波长的光表现为不同的颜色饱和度:是指色彩的深浅程度,指相对纯净度,或一种颜色混合白光的数量,饱和度与所加白光的数量成反比。亮度:指人眼感受的光的明暗程度,与物体的反射度有关。如果在其中掺入的白色越多,其亮度越高,如果在其中掺入的黑色越多,则其亮度越低。色调的取值范围[0,360]。饱和度的取值范围[0,1]亮度的取值范围[0,1]4.1色彩空间变换4.HSV色彩空间从RGB色彩空间转换到HSV色彩空间公式如下:4.1色彩空间变换4.HSV色彩空间在cv2.cvtColor()函数中使用cv2.COLOR_BGR2HSV转换码可将图像从BGR色彩空间转换为HSV色彩空间,实力代码如下:4.1色彩空间变换5.cv2.cvtColor函数cvtColor函数是OpenCV里用于图像颜色空间转换,可以实现RGB颜色、HSV颜色、HSI颜色、lab颜色、YUV颜色等转换,也可以彩色和灰度图互转。几种色彩空间之间的相互转换的转换代码如表所示:转换关系值BGR色彩空间与YCrCb色彩空间之间的转换COLOR_BGR2YCrCbCOLOR_RGB2YCrCbCOLOR_YCrCb2BGRCOLOR_YCrCb2RGBBGR色彩空间与GRAY色彩空间之间的转换COLOR_BGR2GRAYCOLOR_RGB2GRAYCOLOR_GRAY2RGBCOLOR_GRAY2BGRBGR色彩空间与YUV色彩空间之间的转换COLOR_BGR2YUVCOLOR_RGB2YUVCOLOR_YUV2RGBCOLOR_YUV2BGR4.1色彩空间变换应用实例1:cvtColor()函数实现图像色彩空间的转换4.1色彩空间变换应用实例2:识别摄像头中提取某种颜色的物体(例如:识别蓝色的物体)4.2几何变换几何变换:在不改变图像内容的前提下对图像像素的进行空间几何变换,也被称为坐标变换;几何变换改变了图像中像素间的空间关系,即像素的空间位置关系,比如可以放大和缩小图像;几何变换建立了一种原图像像素与变换后图像像素之间的映射关系,通过这种映射关系能够实现原图像任意像素计算该像素在变换后图像的坐标位置;应用场景:在深度学习领域常用平移、旋转、镜像等操作进行数据增广在传统CV领域,由于某些拍摄角度的问题,需要对图像进行矫正处理几何变换主要包括:平移变换(Translation),缩放变换(Scaling),旋转变换(Rotation),仿射变换(Affine),投影变换(Projective)4.2几何变换1、缩放缩放是将图像的尺寸变小或变大的过程,即减少或增加原图像数据的像素个数,或者说通过增加或删除像素点来改变图像的尺寸;256x256的Lena图放大到512x5124.2几何变换1、缩放基本原理:将分辨率(图片尺寸)为(w,h)的图像,缩放后其图像分辨率(图像尺寸)为(w’,h’),则水平方向的缩放系数为Sx=w’/w,垂直方向的缩放系数为Sy=h’/h,设原始图像的某个像素点坐标为(x0,y0),缩放后的图像的像素点坐标为(x,y),则(x0,y0)和(x,y)的关系如下:图像缩放算法:最近邻插值算法、双线性插值算法、立方插值算法、像素关系重采样算法4.2几何变换1、缩放最近邻算法:计算缩放后图像的像素对应原图像中的哪个坐标点的像素来填充,但计算结果有可能不是整数,需要将其转换为整数,不同的插值法计算方法不同,当采取四舍五入算法时,就是最近邻算法。设(x0,y0)为源图像素点的坐标,(x,y)为缩放后图像像素点坐标,有公式:则(x,y)坐标的像素值为源图(x0,y0)的坐标的像素值,即将源图中(x0,y0)的坐标的像素值拷贝到缩放后图像(x,y)坐标位置举例:4.2几何变换1、缩放最近邻算法:优点:最常见,最通用的算法之一,计算量小,算法简单,运算速度快缺点:容易导致像素的变化不连续,放大图像时,会出现严重的马赛克现象,缩小图像时会严重失真Bilinear算法:也称为双线性插值算法,使用与点(x,y)最近邻的四个像素进行插值运算,设与(x,y)临近的四个像素点坐标为(i,j),(i+1,j),(i,j+1),(i+1,j+1),又令u=x-i,v=y-j,则点(x,y)的灰度值为:4.2几何变换1、缩放Bilinear算法:该算法的实质就是将原来的采样点(浮点数,即计算出的坐标值)的附近点的四个像素值乘以权重得到新图像的像素信息。优点:最常见,最通用的算法之一,效果比最近邻插值法好。计算量较小,运算速度较快。图像连续性较好。与最近邻算法相比,效果要好于最近邻插值,只是计算量稍大一些,算法复杂些,程序运行时间也稍长些,但缩放后图像质量高,基本克服了最近邻插值灰度值不连续的特点缺点:放大时图像较为模糊,细节损失较严重,图像边缘在一定程度上变得较为模糊4.2几何变换1、缩放OpenCV实现图像缩放:方法:使用cv2.resize()函数实现图像的放大和缩小,基本语法格式如下:dst=cv2.resize(src,dsize[,fx[,fy[,interpolation]]]])参数说明:dst表示转换后的图像。src表示用于缩放的原图像。dsize表示转换后的图像大小。fx表示水平方向的缩放比例。fy表示垂直方向的缩放比例。interpolation表示插值方式4.2几何变换1、缩放OpenCV实现图像缩放:方法:使用cv2.resize()函数实现图像的放大和缩小,基本语法格式如下:dst=cv2.resize(src,dsize[,fx[,fy[,interpolation]]]])参数说明:interpolation表示插值方式,该参数值以下5种,在缩小时推荐使用cv2.INTER_AREA,扩大时推荐使用cv2.INTER_CUBIC和cv2.INTER_LINEARinterpolation选项插值方式cv2.INTER_NEAREST最近邻插值cv2.INTER_LINEAR双线性插值(默认)cv2.INTER_AREA使用像素区域关系进行重采样。cv2.I

温馨提示

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

评论

0/150

提交评论