图像缩放
缩放是对图像的大小进行调整,就是使图像放大或缩小。
缩放函数: cv2.resize()
函数原型:img=cv2.resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None)
src :原始图像
dsize:输出图像的尺寸 (元组方式) [即(宽,高)]
dst :输出图像
fx:沿水平轴缩放的比例因子
fy :沿垂直轴缩放的比例因子
interpolation :插值方法,有以下5种:
cv2.INTER_NEAREST | 最近邻插值 |
cv2.INTER_LINEAR | 双线性插值(默认) |
cv2.INTER_AREA | 使用像素区域关系进行重采样 |
cv2.INTER_CUBIC | 4x4像素邻域的双3次插值 |
cv2.INTER_LANCZOS4 | 8x8像素邻域的Lanczos插值 |
如果要缩小图像,建议选择: cv2.INTER_AREA;如果要放大图像,cv2.INTER_CUBIC效果更好但是速度慢,cv2.INTER_LINEAR效果尚可且速度快。 进行缩放时, dsize和fx、fy 二选一即可 。
图像平移
将图像按照指定方向和距离,移动到相应的位置。
平移函数: cv2.warpAffine()
函数原型 :dst=cv2.warpAffine(img,M,dsize)
img:输入图像
M:2*3移动矩阵
对于(x,y)处的像素点,要把它移动到(x+tx,y+ty)处时,M矩阵应如下设置:

将 M设置为np.float32类型的Numpy数组。
dsize:输出图像的大小
输出图形的大小,它应该是 (宽度,高度) 的形式。 width=列数,height=行数。
图像旋转
图像按照某个位置转动一定角度的过程,旋转中图像仍 保持原始尺寸。图像旋转后图像的水平对称轴、垂直对称轴及中心坐标原点都可能发生变换,因此需要对图像旋转中的坐标进行相应转换。
在OpenCV中,图像旋转首先根据旋转角度和旋转中心获取旋转矩阵,然后根据旋转矩阵进行变换,即可实现任意角度和任意中心的旋转效果。
旋转矩阵获取函数: cv2.getRotationMatrix2D()
函数原型: M=cv2.getRotationMatrix2D(center,angle,scale)
center:旋转中心
angle:旋转角度
scale:缩放比例
获取旋转矩阵M后,再调用cv2.warpAffine()即可完成图像的旋转。
代码:
img = cv.imread('test.jpg')
rows, cols=img.shape[:2]
M=cv.getRotationMatrix2D((cols/2, rows/2), 90, 1)
dst=cv.warpAffine(img,M,(cols, rows))
cv.imshow('xuanzhuan', dst)
cv.waitKey(0)仿射变换
图像的仿射变换涉及到图像的形状位置角度的变化,仿射变换主要是对图像的缩放、旋转、翻转和平移等操作的组合。
什么是仿射变换?对应图中的对应点一一映射,但整体形状大大改变。通过两组三点(感兴趣点)求出仿射变换,就能把仿射变换应用到图像中的所有点,从而完成图像的仿射变换。

创建仿射变换矩阵函数: cv2.getAffineTransform()
函数原型: M=cv2.getAffineTransform(src,dst)
src:原始图像
dst:输出图像
代码:
img = cv.imread('test.jpg')
rows, cols=img.shape[:2]
pts1 = np.float32([[50, 50], [200, 50], [50, 200]]) #要找三个点
pts2 = np.float32([[100, 100], [200, 50], [100, 250]])
M = cv.getAffineTransform(pts1,pts2)
dst = cv.warpAffine(img,M,(cols,rows))
cv.imshow('fsbh', dst)
cv.waitKey(0)
透射变换
透射变换是 视角变化的结果,是指利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换。
创建透视变换矩阵函数:cv2.getPerspectiveTransform()
函数原型:T=cv2.getPerspectiveTransform( src,dst)
src:原始图像
dst:输出图像
图像透视移动函数:cv2.warpPerspective()
函数原型:dst=cv2.warpPerspective(img,T,dsize)
img :输入图像
T : 3*3移动矩阵
将 T设置为np.float32类型的Numpy数组,由 cv2.getPerspectiveTransform()得到 。
dsize:输出图像的大小
代码:
img = cv.imread('test.jpg')
rows, cols=img.shape[:2]
pts1 = np.float32([[56, 65], [368, 52], [28, 387], [389, 390]]) #要找四个点
pts2 = np.float32([[100, 145], [300, 100], [80, 290], [310, 300]])
T = cv.getPerspectiveTransform(pts1, pts2)
dst = cv.warpPerspective(img, T, (cols, rows))
cv.imshow('tsbh', dst)
cv.waitKey(0)
图像金字塔

上采样函数:cv2.pyrUp()
函数原型:dst=cv2.pyrUp(img)
下采样函数:cv2.pyrDown()
函数原型:dst=cv2.pyrDown(img)
代码:
img = cv.imread('test.jpg')
up_img = cv.pyrUp(img)
down_img = cv.pyrDown(img)
cv.imshow('up', up_img)
cv.imshow('down', down_img)
cv.waitKey(0)总结:

版权声明:本文为qq_53457019原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。