版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机视觉基础知识图像几何变换目录CONTENTS图像平移图形镜像操作图像缩放图像旋转图像仿射变换01图像平移图像平移(1)效果图像平移,就是把图像整体向某个方向移动,右边的图是把图像向右移动100个像素的效果。左侧是原来的图像,右侧是移动之后的图像。图像平移(2)读取图像代码:img=cv2.imread("lena.jpg")(3)创建新的图像空间新图像的大小与原始图像大小相同:img2=np.zeros(img.shape,np.uint8)zeros是numpy提供的创建并初始化数组的函数,把数组的元素都设置为0,第1个参数表示创建的数组的大小,这里img.shape表示原始图像的大小,例如(256,256,3),也可以直接指定数组的大小,np.uint8表示生成的数组的元素类型uint8,用于表示图像的像素值,范围是0到255。图像平移(4)复制图像img.shape[0]表示图像的行数,foriinrange(img.shape[0])表示对所有行进行遍历img.shape[1]表示图像的列数,forjinrange(img.shape[1]-100)表示对循环的次数是列数减去100img2[i,j+100]=img[i,j]表示把img的第i行第j列复制到img2的第i行,第j+100列。得到一副图像的副本image.copy()foriinrange(img.shape[0]):forjinrange(img.shape[1]-100):img2[i,j+100]=img[i,j]图像平移(5)输出图像为了对比,使用np的hstack把两张图片合在一起,使用imshow显示图片。img3=np.hstack([img,img2])cv2.imshow('显示图像',img3)02图像镜像图像镜像(1)左右镜像效果图像镜像实现镜像foriinrange(img.shape[0]):forjinrange(img.shape[1]):img2[i,j]=img[i,j]img2[i,img.shape[1]*2-j-1]=img[i,j]图像镜像(5)使用OpenCV中的flip函数OpenCV中提供了专门的镜像的函数:flip(img,type,dst=None)img表示要做镜像操作的图像;type表示镜像操作的类型,值为1表示水平镜像,值为0表示垂直镜像,值为-1表示对角镜像。dst表示镜像的结果图像,也可以使用返回值表示镜像的结果。图像镜像#水平镜像horizontal=cv2.flip(img,1,dst=None)#垂直镜像vertical=cv2.flip(img,0,dst=None)#对角镜像cross=cv2.flip(img,-1,dst=None)03图像缩放图像缩放resize函数cv2.resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None),各参数含义如下:src,表示原始图像;dsize,表示缩放之后的图像大小;fx,表示沿水平轴的比例因子fy,表示沿垂直轴的比例因子interpolation,表示插值方法。图像缩放插值方法INTER_NEAREST:最邻近插值INTER_LINEAR:双线性插值,如果不指定插值方式,默认使用这种方法INTER_AREA:区域插值,基于像素区域关系INTER_CUBIC:采用双三次样条插入INTER_LANCZOS4:兰索斯插值,由相邻的8*8像素计算得出,公式类似于双线性速度比较:INTER_NEAREST(最近邻插值)>INTER_LINEAR(线性插值)>INTER_CUBIC(三次样条插值)>INTER_AREA(区域插值)如果要缩小图像,通常使用INTER_AREA插值效果最好而要放大图像,通常使用INTER_CUBIC,速度较慢,但效果最好,也可以使用INTER_LINEAR,速度较快,效果还可以,一般不推荐使用INTER_NEAREST。04图像旋转图像旋转旋转效果图像旋转创建旋转矩阵创建一个旋转矩阵,使用cv2.getRotationMatrix2D()函数第一个参数表示需要旋转的中心点第二个参数表示需要旋转的角度第三个参数表示需要缩放的比例。例如:旋转的中心是原来图像的中心点,旋转的角度是30°,缩放比例是1。rotate=cv2.getRotationMatrix2D((height*0.5,width*0.5),30,1)图像旋转做仿射变换仿射变换的函数原型:cv2.warpAffine(src,M,dsize[,dst[,flags[,borderMode[,borderValue]]]])其中,src表示输入图像,M表示变换矩阵,dsize表示输出图像的大小,flags表示插值方法的组合(int类型),borderMode表示边界像素模式(int类型),borderValue表示边界填充值,默认值为0。下面的方法使用旋转矩阵对图像进行旋转:img2=cv2.warpAffine(img,rotate,(height,width))05图像仿射变换图像仿射变换仿射变换图像仿射变换定义关键点之间的映射关系src=np.float32([[0,0],[0,height-1],[width-1,0]])dst=np.float32([[50,50],[100,height-50],[width-50,100]])matAffine=cv2.getAffineTransform(src,dst)第1行代码给出的原始图像中的3个点坐标,分别是左上角、左下角、右上角,第2行代码给出的是目标图像中的3个点坐标,第3行代码建立了两个图像之间的映射关系。图像仿射变换仿射变换img2=cv2.warpAffine(img,matAffine,(height,width))第1个参数是原始图像第2个参数是映射矩阵第3个参数表示目标图像的大小。《人工智能应用基础》小结图像平移通过代码,可以实现灵活的平
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论