【OpenCV Python】核心操作--几何变换

1.几何变换的实际意义

从线性代数角度来看,在一个向量[x,y]前面乘以一个矩阵


其本质上,是将向量[x,y]转换到[a1,b1] , [a2,b2]的坐标系中,即实现向量[x,y]的位移

2.扩展缩放

opencv提供cv2.resize(图形文件,(x方向长度,y方向高度),转换模式)或者

Cv2.resize(图形文件,fx=x方向倍数,fy=y方向倍数,转换模式)来实现图形的缩放

例:

img_resize =cv2.resize(img,(2*col,2*row),interpolation=cv2.INTER_CUBIC)

其中转换模式 interpolation= 常用有cv2.INTER_AREA, cv2.INTER_CUBIC,cv2.INTER_LINEAR等,不同之处在于插值方式不同。

结果如下:


3.平移

平移操作本质上,是将每个像素的坐标都乘以一个位移矩阵,使得像素坐标变换来实现位移。

opencv提供cv2.warpAffine(图形文件,位移矩阵,(位移后窗口长度,位移后窗口宽度))来实现位移,

所以位移操作的重点在于构建位移矩阵。位移矩阵格式如下:


txx方向位移距离,tyy方向位移距离。具体推导如下:


例:

M=np.float32([[1,0,50],[0,1,50]])

img_change=cv2.warpAffine(img,M,(2*col,2*row))

其结果如下:

 


4.旋转

选择操作首先要使用

cv2.getRotationMatrix2D((旋转中心X坐标,旋转中心Y坐标) , 旋转角度 , 旋转后窗口大小倍数)

来构建旋转矩阵。旋转矩阵格式如下:


再将这个旋转矩阵,传给函数cv2.warpAffine()来实现旋转。其原理和位移操作一样。

例:

rotate_M = cv2.getRotationMatrix2D((col/2,row/2),45,0.8)

img_rotate = cv2.warpAffine(img,rotate_M,(col,row))

其结果如下:


 

阅读更多
想对作者说点什么? 我来说一句

空间几何变换

2017年11月21日 27KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭