1 简介
-
了解几何变换的概念与应用
-
理解平移、旋转的原理
-
掌握在OpenCV框架下实现平移、旋转操作
2 算法理论介绍
该部分将对基本的几何变换进行学习,几何变换的原理大多都是相似,只是变换矩阵不同,因此,我们以最常用的平移和旋转为例进行学习。在深度学习领域,我们常用平移、旋转、镜像等操作进行数据增广
3 图形的平移
平移之前,我们需要先构造一个移动矩阵,所谓移动矩阵,就是让说明白在x轴方向上移动多少距离,在y轴上移动多少距离。通过numpy来构造这个矩阵,并将其传给仿射函数cv2.warpAffine( )
img = cv2.imread('./src/cat.jpg')
# 构造移动矩阵H
# 在x轴方向移动多少距离,在y轴方向移动多少距离
H = np.float32([[1, 0, 50], [0, 1, 25]])
rows, cols = img.shape[:2]
print(img.shape)
print(rows, cols)
res = cv2.warpAffine(img, H, (cols, rows)) # 注意这里rows和cols需要反置
cv2.imshow('origin_picture', img)
cv2.imshow('new_picture', res)
cv2.waitKey(0)
3 图形的旋转
对于图像的旋转,我们需要构造旋转矩阵。一般的图像的旋转矩阵是在原点处进行变换的
img = cv2.imread('./src/cat.jpg')
rows, cols = img.shape[:2]
# 第一个参数是旋转中心,第二个参数是旋转角度,第三个参数是缩放比例
M3 = cv2.getRotationMatrix2D((cols/2, rows/2), 45, 1)
res3 = cv2.warpAffine(img, M3, (cols, rows))
cv2.imshow('res3', res3)
cv2.waitKey(0)
cv2.destroyAllWindows()