- 扩展缩放
扩展缩放就是放大或缩小图像的尺寸,使用 cv2.resize() 可以实现这个功能。图像的尺寸可以自己手动设置,你也可以指定缩放因子。
cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, interpolation)
参数 |
说明 |
InputArray src |
输入图片 |
OutputArray dst |
输出图片 |
OutputArray dst |
输出图片 |
Size |
输出图片尺寸 |
fx, fy |
沿x轴,y轴的缩放系数 |
interpolation |
插值方式 |
插值方式 |
解释 |
INTER_NEAREST |
最近邻插值 |
INTER_LINEAR |
双线性插值(默认设置) |
INTER_AREA |
使用像素区域关系进行重采样。 |
INTER_CUBIC4x4 |
像素邻域的双三次插值 |
INTER_LANCZOS48x8 |
像素邻域的Lanczos插值 |
import cv2
import numpy as np
img=cv2.imread('logo.jpg')
# 下面的 None 本应该是输出图像的尺寸,但是因为后边我们设置了缩放因子
# 因此这里为 None
res=cv2.resize(img,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
#OR
# 这里呢,我们直接设置输出图像的尺寸,所以不用设置缩放因子
height,width=img.shape[:2]
res=cv2.resize(img,(2*width,2*height),interpolation=cv2.INTER_CUBIC)
while(1):
cv2.imshow('res',res)
cv2.imshow('img',img)
if cv2.waitKey(1) & 0xFF == 27:
break
cv2.destroyAllWindows()
- 平移
平移就是对图像进行水平、竖直方向上的移动。假如我们需要在水平竖直方向上移动Tx,Ty距离,则需要构建如下矩阵(数据类型是 np.float32)。
然后通过 cv2.warpAffine() 函数进行移动。
cv2.warpAffine(img,H,(cols,rows))
参数 |
解释 |
img |
需要变换的图像 |
H |
变换矩阵 |
cols,rows |
变换后的尺寸 |
import cv2
import numpy as np
img = cv2.imread('logo.jpg')
H = np.float32([[1,0,100],[0,1,50]])#变换矩阵
rows,cols = img.shape[:2]
res = cv2.warpAffine(img,H,(cols,rows)) #需要图像、变换矩阵、变换后的大小
cv2.imshow('res',res)
cv2.imshow('img',img)
- 旋转
旋转是通过 cv2.getRotationMatrix2D 函数获得旋转矩阵,然后通过 cv2.warpAffine 进行图像旋转。
import cv2
import numpy as np
img=cv2.imread('logo.jpg',0)
rows,cols = img.shape
# 这里的第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子
# 可以通过设置旋转中心,缩放因子,以及窗口大小来防止旋转后超出边界的问题
M=cv2.getRotationMatrix2D((cols/2,rows/2),45,0.6)#获得旋转矩阵
# 第三个参数是输出图像的尺寸中心
dst=cv2.warpAffine(img,M,(2*cols,2*rows))
while(1):
cv2.imshow('img',dst)
if cv2.waitKey(1)&0xFF==27:
break
cv2.destroyAllWindows()
- 仿射变换
import cv2
import numpy as np
img=cv2.imread('logo.jpg')
rows,cols,ch=img.shape
pts1=np.float32([[50,50],[200,50],[50,200]])#变换前的点
pts2=np.float32([[10,100],[200,50],[100,250]])#变换后的点
M=cv2.getAffineTransform(pts1,pts2)#获得变换矩阵
dst=cv2.warpAffine(img,M,(cols*2,rows*2))
while(1):
cv2.imshow('img',dst)
if cv2.waitKey(1)&0xFF==27:
break
cv2.destroyAllWindows()
- 透视变换
import cv2
import numpy as np
img=cv2.imread('logo.jpg')
rows,cols,ch=img.shape
pts1 = np.float32([[0,0],[368,52],[28,387],[389,390]])#
pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])
M=cv2.getPerspectiveTransform(pts1,pts2)
dst=cv2.warpPerspective(img,M,(300,300))
while(1):
cv2.imshow('img',dst)
if cv2.waitKey(1)&0xFF==27:
break
cv2.destroyAllWindows()