20150310
先看了仿射变换的wiki
即仿射=线性变换(矩阵A)+平移(向量b),这里的线性变换就可以包括了旋转和缩放了。
如果写成其次的方式是,也就是可以将线性变换和平移都统一到一个矩阵中,称为仿射矩阵:
或者
那么知道基础概念后,就可以应用了得到关键点之后的图片对齐了。opencv提供了一个比较详细的样例
从前面的描述我们可以知道:
- 如果有了原图和仿射矩阵,那么直接用公式就能够得到原图中每一点在仿射之后空间的坐标,那么就得到了输出图像。
- 如果只有原图而还不知道仿射矩阵,这时候需要知道原图中至少3个点在仿射后的图像的位置,然后通过这个三个点来求得仿射矩阵。(如果大于3个点,那么就是拟合出一个相对最优的仿射矩阵)
几个opencv里面用到的相关函数:
- Mat getAffineTransform(const Point2f src[], const Point2f dst[]),传入3对相互对应的点,返回仿射矩阵。
- void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar()) 传入原图和仿射矩阵,得到输出后的图像