学习资源《机器学习实践指南 案例应用解析》
概念
仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。[1]
仿射变换是在几何上定义为两个向量空间之间的一个仿射变换或者仿射映射(来自拉丁语,affine,“和…相关”)由一个非奇异的线性变换(运用一次函数进行的变换)接上一个平移变换组成。
在有限维的情况,每个仿射变换可以由一个矩阵A和一个向量b给出,它可以写作A和一个附加的列b。一个仿射变换对应于一个矩阵和一个向量的乘法,而仿射变换的复合对应于普通的矩阵乘法,只要加入一个额外的行到矩阵的底下,这一行全部是0除了最右边是一个1,而列向量的底下要加上一个1。
详细数学推理可见百度百科 。
Python OpenCV
warpAffine
OpenCV的warpAffine函数可实现仿射变换:
cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) -> dst
getRotationMatrix2D
OpenCV的getRotationMatrix2D函数计算二维旋转变换矩阵:
cv2.getRotationMatrix2D(center,angle,scale)->retval
实例 对目标图片实现缩小并旋转的操作
# -*- coding: utf-8 -*-
import cv2
fn="test3.jpg"
img=cv2.imread(fn)
w=img.shape[1]
h=img.shape[0]
#得到仿射变换矩阵,完成旋转
#中心
mycenter=(h/2,w/2)
#旋转角度
myangle=90
#缩放尺度
myscale=0.5
#仿射变换完成缩小并旋转
transform_matrix=cv2.getRotationMatrix2D(mycenter,myangle,myscale)
newimg = cv2.warpAffine(img,transform_matrix,(w,h))
cv2.imshow('preview',newimg)
cv2.waitKey()
cv2.destroyAllWindows()
单纯的缩放也可以通过resize函数实现:
ResizeImg = cv2.resize(src=Img, dsize=(Img.shape[1]*2,\
Img.shape[0]*2), interpolation=cv2.INTER_LINEAR)