图像的几何变换
学习目标
- 掌握图像的缩放、平移、旋转等
- 了解数字图像的仿射变换和透射变换
1 图像的缩放
缩放是对图像的大小进行调整,即 使图像放大或缩小
cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR)
参数:
- src :输入图像
- dsize ;绝对尺寸 ,直接指定调整后图像的大小
- fx,fy :相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可
- interpolation: 插值方法
代码实现
python
import cv2 as cv
#读取图片
img1 = cv.imread('lena.png')
#图像的缩放
#法1 :绝对尺寸
rows, cols = img1.shape[:2]
res = cv.resize(img1 , (2*cols,2*rows),interpolation=cv.INTER_CUBIC)
#法二 :相对尺寸
res1 = cv.resize(img1,None,fx=0.5,fy=0.5)
#图像显示
cv.imshow("original",img1)
cv.imshow("enlarge",res)
cv.imshow("shrink",res1)
cv.waitKey(0)
结果展示
2图像的平移
代码实现
python
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
#读取图像
img1 = cv.imread("lena.png")
#图像的平移
rows ,cols = img1.shape[:2]
M= np.float32([[1,0,100],[0,1,50]]) #平移矩阵
dst = cv.warpAffine(img1,M,(cols,rows))
#图像的显示
fig,axes = plt.subplots(nrows=1,ncols=2,figsize=(7,4),dpi=100)
axes[0].imshow(img1[:,:,::-1])
axes[0].set_title("原图")
axes[1].imshow(dst[:,:,::-1])
axes[1].set_title("平移后的结果")
plt.show()
结果展示
3 图像的旋转
代码实现
python
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
#读取图像
img = cv.imread("lena.png")
#旋转图像
rows ,cols = img.shape[:2]
#生成旋转矩阵
M = cv.getRotationMatrix2D((cols/2 ,rows/2),90,1)
#进行旋转变换
dst = cv.warpAffine(img,M,(cols,rows))
#图像展示
fig ,axes = plt.subplots(nrows=1,ncols=2,figsize=(5,4),dpi=100)
axes[0].imshow(img[:,:,::-1])
axes[0].set_title("原图")
axes[1].imshow(dst[:,:,::-1])
axes[1].set_title("旋转后的结果")
plt.show()
M = cv.getRotationMatrix2D((cols/2 ,rows/2),90,1)
- cols/2 ,rows/2 :旋转中心
- 90 : 逆时针旋转角度
- 1:缩放比例(不进行缩放)