【OpenCV3图像处理】图像简单几何变换:旋转、平移、缩放

仿射变换

仿射变换(Affine Transformation或 Affine Map),又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间的过程。它保持了二维图形的“平直性”(即:直线经过变换之后依然是直线)和“平行性”(即:二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变)。
一个任意的仿射变换都能表示为乘以一个矩阵(线性变换)接着再加上一个向量(平移)的形式。
那么, 我们能够用仿射变换来表示如下三种常见的变换形式:
旋转,rotation (线性变换)
平移,translation(向量加)
缩放,scale(线性变换)
仿射变换代表的是两幅图之间的一种映射关系,使用矩阵 A 和 B 对二维向量X=[x,y]T 做变换

这里写图片描述

这里写图片描述
通常使用2 x 3的矩阵来表示仿射变换,所以也能表示为下列形式:
这里写图片描述

这里写图片描述

仿射变换应用场景:

1.已知 X和T,求矩阵 M
2.已知 M和X,求得T

对一张图片旋转、平移、缩放就属于场景2

仿射变换相关的函数

OpenCV仿射变换相关的函数一般涉及到warpAffine和getRotationMatrix2D这两个:
warpAffine 来实现一些简单的重映射
getRotationMatrix2D 来获得旋转矩阵

warpAffine函数

warpAffine函数的作用是依据如下式子,对图像做仿射变换

这里写图片描述

void warpAffine(
InputArray src, 
OutputArray dst, 
InputArray M, 
Size dsize, 
int flags=INTER_LINEAR, 
int borderMode=BORDER_CONSTANT, 
const Scalar& borderValue=Scalar())

InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。
OutputArray类型的dst,函数调用后的运算结果存在这里,需和源图片有一样的尺寸和类型。
InputArray类型的M,2×3的变换矩阵。
Size类型的dsize,表示输出图像的尺寸。
int类型的flags,插值方法的标识符。此参数有默认值INTER_LINEAR(线性插值),可选的插值方式如下:
INTER_NEAREST - 最近邻插值
INTER_LINEAR - 线性插值(默认值)
INTER_AREA - 区域插值
INTER_CUBIC –三次样条插值
INTER_LANCZOS4 -Lanczos插值
CV_WARP_FILL_OUTLIERS - 填充所有输出图像的象素。如果部分象素落在输入图像的边界外,那么它们的值设定为 fillval.
CV_WARP_INVERSE_MAP –表示M为输出图像到输入图像的反变换,即 。因此可以直接用来做象素插值。否则, warpAffine函数从M矩阵得到反变换。
第六个参数,int类型的borderMode,边界像素模式,默认值为BORDER_CONSTANT。
第七个参数,const Scalar&类型的borderValue,在恒定的边界情况下取的值,默认值为Scalar(),即0。

旋转

getRotationMatrix2D函数,可以由旋转中心center、旋转角度angle、缩放系数scale,计算出计算二维旋转变换矩阵,即warpAffine函数的第三个参数,再使用warpAffine函数进行仿射变换

这里写图片描述

getRotationMatrix2D函数原型:

cv::Mat cv::getRotationMatrix2D( Point2f center,double angle, double scale )  
{  
   angle *= CV_PI/180;  
   double alpha = cos(angle)*scale;  
   double beta = sin(angle)*scale;  

   Mat M(2, 3, CV_64F);  
   double* m = (double*)M.data;  

   m[0] = alpha;  
   m[1] = beta;  
   m[2] = (1-alpha)*center.x - beta*center.y;  
   m[3] = -beta;  
   m[4] = alpha;  
   m[5] = beta*center.x + (1-alpha)*center.y;  

   return M;  
}  

Point2f类型的center,表示源图像的旋转中心
double类型的angle,旋转角度。角度为正值表示向逆时针旋转(座标原点是左上角)
double类型的scale,缩放系数

缩放

平移

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章