这篇教程OpenCV图像处理之七种常用图像几何变换写得很实用,希望能帮到您。
0 程序环境与所学函数本章程序运行需要导入下面三个库,并定义了一个显示图像的函数 所学函数 ##放大、缩小cv.resize(img,dsize,[interpolation])##平移变换M = np.array([[...]], dtype=np.float32)cv.warpAffine(img, M, dsize)##镜像变换cv.flip(img, 1) # 垂直镜像cv.flip(img, 0) # 水平镜像cv.flit(img, -1) # 水平垂直同时进行##旋转变换M = cv.getRotationMatrix2D(center, angle, scale)img_rotate = cv.rotate(img, cv.ROTATE_90_CLOCKWISE)##透视变换M = cv.getPerspectiveTransform(src, dst)img = cv.warpPerspective(img, M, dsize)
1 裁剪、放大、缩小读入图像 img = cv.imread('pic/rabbit500x333.jpg')show(img) 显示 
裁剪:数组选择方法(冒号) #裁剪rabbit = img[150:450:] #限定行数,列数和三通道show(rabbit) 显示 
放大和缩小:resize()函数 插值方法 
程序实现 #放大缩小#cv.resize(img,dsize,[interpolation]) dsize表示大小,[interpolation]是插值方法,可选,有默认值img2 = cv.resize(img,(500,400)) #放大为宽500高400#使用定义插值方法#一般来说放大地话选择LINEAR方法,缩小选择AREA方法img3 = cv.resize(img,(500,400),interpolation=cv.INTER_NEAREST)show(np.hstack([img2,img3])) 显示 
2 平移变换原理、平移矩阵推导 
读入图像 img = cv.imread('pic/rabbit500x333.jpg')show(img) 显示 
程序实现 # M = np.array([[...]],dtype=np.float32) # cv.warAffine(img,M,dsize) cv里面图像仿射变换函数,M是上面矩阵,dsize是输出图像大小M=np.array([ [1,0,100], [0,1,50]],dtype=np.float32) #水平向右平移100个像素点,竖直向下平移50个像素点,原理见理论部分 img2 = cv.warpAffine(img,M,(333,500))show(img2) 显示 
3 错切变换原理、错切矩阵推导 

读入图像 img = cv.imread('pic/rabbit500x333.jpg')show(img) 显示 
水平错切 M = np.array([ [1,0.2,0], [0,1,0]],dtype=np.float32) img3 = cv.warpAffine(img,M,(533,500))show(img3) 显示 
垂直错切 M = np.array([ [1,0,0], [0.3,1,0]],dtype=np.float32) img3 = cv.warpAffine(img,M,(333,700))show(img3) 显示 
4 镜像变换原理、镜像矩阵推导 
读入图像 img = cv.imread('pic/rabbit500x333.jpg')show(img) 显示 
水平镜像 Mx = np.array([ [-1,0,333], [0,1,0]],dtype = np.float32)img2 = cv.warpAffine(img,Mx,(333,500)) #仿射变换函数show(img2) 显示 
垂直镜像 My = np.array([ [1,0,0], [0,-1,500]],dtype=np.float32) img3 = cv.warpAffine(img,My,(333,500))show(img3) 显示 
opencv内置函数实现镜像变换 #垂直镜像 cv.flip(img,1) #水平镜像 cv.flip(img,0) #水平垂直同时进行 cv.flip(img,-1) 程序实现 img4 = cv.flip(img,1) #垂直镜像img5 = cv.flip(img,0) #水平镜像img6 = cv.flip(img,-1) #水平垂直镜像同时进行 show(np.hstack([img4,img5,img6])) 显示 
5 旋转变换原理、旋转矩阵推导 

读入图像 img = cv.imread('pic/rabbit500x333.jpg')show(img) 显示 
图像旋转 beta = np.pi/4#旋转矩阵M = np.array([ [np.cos(beta),np.sin(beta),0], [-np.sin(beta),np.cos(beta),0]],dtype=np.float32) img2 = cv.warpAffine(img,M,(633,300))show(img2) 显示 
opencv内置获取旋转矩阵函数: M = cv.getRotationMatrix2D(center,angle,scale) Python面向对象之类和对象 python绘制超炫酷动态Julia集示例 |