基础图像处理 OpenCV图像处理实战课件_第1页
基础图像处理 OpenCV图像处理实战课件_第2页
基础图像处理 OpenCV图像处理实战课件_第3页
基础图像处理 OpenCV图像处理实战课件_第4页
基础图像处理 OpenCV图像处理实战课件_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

第二章基础图像处理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运算结果

温馨提示

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

最新文档

评论

0/150

提交评论