模块6 图像的几何变换《计算机视觉处理项目实战》教学课件_第1页
模块6 图像的几何变换《计算机视觉处理项目实战》教学课件_第2页
模块6 图像的几何变换《计算机视觉处理项目实战》教学课件_第3页
模块6 图像的几何变换《计算机视觉处理项目实战》教学课件_第4页
模块6 图像的几何变换《计算机视觉处理项目实战》教学课件_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

《计算机视觉处理项目实战》✩精品课件合集✩精品课件合集第X章XXXX模块6图像的几何变换RGB色彩空间CONTENTS目录0102RGB色彩空间GRAY色彩空间03HSV色彩空间RGB色彩空间RGB色彩空间中,图像的每个像素用一个三元组表示,三元组中的3个值依次表示红色、绿色和蓝色,依次对应R、G和B通道。在cv2.cvtColor()函数中使用cv2.COLOR_BGR2RGB转换码可将图像从BGR色彩空间转换为RGB色彩空间OpenCV默认采用BGR色彩空间,它按B、G和R通道顺序表示图像。RGB色彩空间使用R(Red,红)、G(Green,绿)和B(Blue,蓝)3种基本颜色表示图像像素。GRAY色彩空间GRAY色彩空间通常指8位灰度图像,其颜色取值范围为[0,255],共256个灰度级。从RGB色彩空间转换为GRAY色彩空间的计算公式如下。Gray=0.299R+0.587G+0.114B在cv2.cvtColor()函数使用cv2.COLOR_BGR2GRAY转换码可将图像从BGR色彩空间转换为GRAY色彩空间231HSV色彩空间HSV色彩空间使用色调(Hue,也称色相)、饱和度(Saturation)和亮度(Value)表示图像。色调H表示颜色,用角度表示,取值范围为[0°,360°],从红色开始按逆时针方向计算。例如,红色为0°、黄色为60°、绿色为120°、青色为180°、蓝色为240°、紫色为300°等。饱和度S表示颜色接近光谱色的程度,或者表示光谱色中混入白光的比例。光谱色中白光的比例越低,饱和度越高,颜色越深、艳。光谱色中白光比例为0时,饱和度达到最高。饱和度的取值范围为[0,1]。亮度V表示颜色明亮的程度,是人眼可感受到的明暗程度,其取值范围为[0,1]。总结0102RGB色彩空间GRAY色彩空间02HSV色彩空间图像翻转变换CONTENTS目录01图像的翻转图像的翻转在OpenCV中,采用函数cv2.flip()实现图像的翻转,可以实现在水平方向,垂直方向或两个方向同时的翻转,其语法结构为:cv2.flip(src,flipCode[,dst])src代表要处理的原始图像;dst代表和原始图像具有同样大小,类型的目标图像;flipCode代表旋转类型,flipCode取值的说明如下表所示。参数值说明意义0只能是0绕着x轴翻转正数1、2、3等任意正数绕着y轴翻转负数-1、-2、-3等任意负数围绕x轴、y轴同时翻转图像的翻转示例:使用flip()函数对图片进行水平翻转、垂直翻转以及水平垂直翻转等操作。importcv2path=r'D:/img/5.jpg'src=cv2.imread(path)window_name='Image'image=cv2.flip(src,1)image1=cv2.flip(src,0)image2=cv2.flip(src,-1)cv2.imshow("originalimage",src)cv2.imshow(window_name,image)cv2.imshow(window_name+"1",image1)cv2.imshow(window_name+"2",image2)cv2.waitKey(0)总结01图像的翻转图像仿射变换CONTENTS目录0102图像的仿射图像平移仿射03图像旋转仿射图像的仿射仿射变换是指图像可以通过一系列的几何变换来实现平移,旋转等多种操作。该变换能够保持图像的平直性和平行性。平直性是指图像经过仿射变换后,直线仍然是直线;平行线是指图像完成仿射变换后,平行线仍然是平行线。实现的方式是通过一个2×3的变换矩阵(映射矩阵)M实现仿射变换,具体为:dst(x,y)=src(M11x+M12y+M13,M21x+M22y+M23)src图像平移仿射采用仿射函数cv2.warpAffine()实现对图像的仿射变换,该函数的语法格式如下:dst=cv2.warpAffine(src,M,dsize[,flags[,borderMode[,borderValue]]])dst代表仿射后的输出图像,该图像的类型和原始图像的类型相同。src代表要仿射的原始图像。M代表一个2×3的变换矩阵。使用不同的变换矩阵,就可以实现不同的仿射变换。dsize代表输出图像的尺寸大小。flags代表插值方法,默认为INTER_LINEAR。当该值为WARP_INVERSEMAP时,意味着M是逆变换类型,实现从目标图像dst到原始图像src的逆变换。borderMode代表边类型,默认为BORDER_CONSTANT。当该值为BORDER_TRANSPARENT时,意味着目标图像内的值不做改变,这些值对应原始图像内的异常值。borderValue代表边界值,默认是0。图像平移仿射示例:通过warpAffine()函数将图向右平移50像素,向下平移50像素。importcv2importnumpyasnpimg=cv2.imread('D:/img/4.jpg')height,width,channel=img.shapeM=np.float32([[1,0,10],[0,1,30]])shifted=cv2.warpAffine(img,M,(width,height))cv2.imwrite('test.png',shifted)图像旋转仿射

在OpenCV库中对图片进行旋转操作时,可以通过使用getRotationMatrix2D()函数与wrapAffine()函数两个函数完成图像的旋转。

getRotationMatrix2D(center,angle,scale)值描述center旋转中心点(cx,cy)你可以随意指定angle旋转的角度单位是角度逆时针方向为正方向,角度为正值代表逆时针scale缩放倍数.值等于1.0代表尺寸不变图像旋转仿射示例:编写一个图像旋转的案例,将图进行旋转操作,以中心为原点,分别是逆时针旋转30°,逆时针旋转45°,逆时针旋转60°。img=cv2.imread('D:/img/1.png')height,width,channel=img.shapecx=int(width/2)cy=int(height/2)center=(cx,cy)new_dim=(width,height)M=cv2.getRotationMatrix2D(center=center,angle=30,scale=1.0)rotated_30=cv2.warpAffine(img,M,new_dim)#展示原图像plt.subplot(221)plt.imshow(img[:,:,::-1])#逆时针旋转30°plt.subplot(222)plt.imshow(rotated_30[:,:,::-1])plt.show()总结0102图像的仿射图像平移仿射02图像旋转仿射图像均值滤波CONTENTS目录01均值滤波均值滤波均值滤波是指以当前点为中心,用其周围N×N个点像素值的平均值来替代当前点的像素值。用于计算平均值的N×N个点称为邻域,用于滤波计算的卷积核大小与邻域相同。例如,一个大小为3×3的邻域如图所示。

则卷积核为

。中心点的均值滤波值143,143比253更接近周围的值。均值滤波OpenCV的cv2.blur()函数用于实现均值滤波,其基本格式如下。dst=cv2.blur(src,ksize[,anchor[,borderType]])参数说明如下。dst为滤波结果图像。src为原图像。ksize为卷积核大小,表示为(width,height),width和height通常设置为相同值,且为正数和奇数。均值滤波示例importcv2img=cv2.imread('lena2.jpg')cv2.imshow('img',img)img2=cv2.blur(img,(20,20))cv2.imshow('imgBlur',img2)cv2.waitKey(0)总结01均值滤波图像的重映射CONTENTS目录01图像的重映射图像的重映射重映射,就是把一副图像中某个位置的像素放置到另一个图片指定位置的过程。为了完成映射过程,需要获取一些插值为非整数像素的坐标,因为原图像与目标图像的像素坐标不是一一对应的。一般情况下,我们通过重映射来表达每个像素的位置(x,y)像这样:OpenCV内的重映射函数cv2.remap()提供了更方便、更自由的映射方式,其语法格式如下:dst=cv2.remap(src,map1,map2,interpolation[,borderMode[,borderValue]])dst代表目标图像,它和src具有相同的大小和类型。src代表原始图像。图像的重映射map1参数它可能有两种可能的表示对象:表示点(x,y)的第一个映射。表示CV_16SC2,CV_32FC1或CV_32FC2类型的x值。map2参数也同样有两种可能的表示对象,而且它会根据map1来确定表示那种图像:当map1表示(x,y)时,这个参数不代表任何值。当map1表示(x,y)点的x值时,该值是CV_16UC1,CV_32FC1类型(x,y)点的y值。borderMode代表边界模式。当该值为BORDER_TRANSPARENT时,表示目标图像内的对应源图像内奇异点(outliers)的像素不会被此函数修改。borderValue代表边界值,当有常数边界时使用的值,该值默认为0。Interpolation代表插值方式。图像的重映射类型说明cv2.INTER_NEAREST最临近插值cv2.INTER_LINEAR双线性插值(默认方式)cv2.INTER_CUBIC三次样条插值。首先对源图像附近的4X4近邻区域进行三次样条拟合,然后将目标像素对应的三次样条值作为目标图像对应像素点的值cv2.INTER_AREA区域插值,根据当前像素点周边区域的像素实现当前像素点的采样。该方法类似最临近插值方式Interpolation参数可取的插值方式举例总结01图像的重映射图像缩放CONTENTS目录0102缩放的概念图像缩放缩放的概念缩放(Zoom),就是将图片进行缩小或者放大。在图像缩放中,可以根据设置图像的像素大小来完成。一般在使用缩放技术时,保持着图像进行均匀的缩小或者放大。图像缩放OpenCV的cv2.resize()函数用于缩放图像,其基本格式如下。dst=cv2.resize(src,dsize[,dst[,fx[,fy[,interpolation]]]])参数说明如下。dst表示转换后的图像。src表示用于缩放的原图像。dsize表示转换后的图像大小。fx表示水平方向的缩放比例。fy表示垂直方向的缩放比例。interpolation表示插值方式。在转换过程中,可能存在一些不能通过转换算法确定值的像素,插值方式决定了如何获得这些像素的值。图像缩放值描述INTER_NEAREST最近邻插值INTER_LINEAR(默认设置)INTER_AREA使用像素区域关系进行重采样INTER_CUBIC4x4像素邻域的双三次插值INTER_LANCZOS48x8像素邻域的Lanczos插值interpolation选项所用的插值方法图像缩放示例:使用size参数实现对图片的缩放的效果。importcv2img=cv2.imread('D:/img/1.png',cv2.IMREAD_UNCHANGED)print('原图像大小:',img.shape)scale_percent=50#原始大小百分比width=int(img.shape[1]*scale_percent/100)height=int(img.shape[0]*scale_percent/100)dim=(width,height)size_resized=cv2.resize(img,dim,interpolation=cv2.INTER_AREA)fxfy_resized=cv2.resize(img,None,fx=0.5,fy=0.5,interpolation=cv2.INTER_AREA)print('size参数缩放大小:',size_resized.shape)print('fxfy参数缩放大小:',fxfy_resized.shape)总结0102缩放的概念图像缩放双边滤波CONTENTS目录01双边滤波双边滤波

双边滤波在计算像素值的同时会考虑距离和色差信息,从而可在消除噪声OpenCV的cv2.bilateralFilter()函数用于实现双边滤波,其基本格式如下。dst=cv2.bilateralFilter(src,d,sigmaColor,sigmaSpace[,borderType])参数说明如下。d表示以当前点为中心的邻域的直径,一般为5。sigmaColor为双边滤波选择的色差范围。sigmaSpace为空间坐标中的sigma值,值越大表示越多的像素点参与滤波计算。当d>0时,忽略sigmaSpace,由d决定邻域大小;否则d由sigmaSpace计算得出,与sigmaSpace成比例。双边滤波示例importcv2ascvsrc=cv.imread("./image/gorilla.png")img=cv.bilateralFilter(src,25,200,200)cv.imshow("img",img)cv.waitKey()cv.destroyAllWindows()总结01双边滤波高斯滤波CONTENTS目录01高斯滤波高斯滤波高斯滤波与均值滤波略有不同,它按像素点与中心点的不同距离,赋予像素点不同的权重值,越靠近中心点权重值越大,越远离中心点权重值越小;然后根据权重值计算邻域内所有像素点的和,将和作为中心点的像素值。OpenCV的cv2.GaussianBlur()函数用于实现高斯滤波,其基本格式如下。dst=cv2.GaussianBlur(src,ksize,sigmaX[,sigmaY[,borderType]])参数说明如下。sigmaX为水平方向上的权重值。sigmaY为垂直方向上的权重值。高斯滤波示例importcv2ascvsrc=cv.imread("./image/11.png")#高斯滤波img=cv.GaussianBlur(src,(5,5),0)cv.imshow("img",img)cv.waitKey()cv.destroyAllWindows()总结01高斯滤波2D卷积CONTENTS目录012D卷积2D卷积均值滤波、高斯滤波、方框滤波、中值滤波和双边滤波等可以通过参数来确定卷积核,2D卷积可使用自定义的卷积核来执行滤波操作。OpenCV的cv2.filter2D()函数用于实现2D卷积,其基本格式如下。dst=cv2.filter2D(src,ddepth,kernel[,anchor[,delta[,borderType]]])参数说明如下。ddepth表示目标图像dst的深度,一般使用-1表示与原图像src一致。kernel为单通道卷积核(一维数组)。anchor为图像处理的锚点。delta为修正值,未省略时,将加上该值作为最终的滤波结果。borderType为边界值处理方式。2D卷积示例importnumpyasnpimportcv2img=cv2.imread('lena2.jpg')k1=np.array([[3,3,3,3,3],[3,9,9,9,3],[3,11

温馨提示

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

最新文档

评论

0/150

提交评论