【OpenCV3图像处理】图像简单几何变换:旋转、平移、缩放
2017-06-23 16:43
609 查看
仿射变换
仿射变换(Affine Transformation或 Affine Map),又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间的过程。它保持了二维图形的“平直性”(即:直线经过变换之后依然是直线)和“平行性”(即:二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变)。一个任意的仿射变换都能表示为乘以一个矩阵(线性变换)接着再加上一个向量(平移)的形式。
那么, 我们能够用仿射变换来表示如下三种常见的变换形式:
旋转,rotation (线性变换)
平移,translation(向量加)
缩放,scale(线性变换)
仿射变换代表的是两幅图之间的一种映射关系,使用矩阵 A 和 B 对二维向量X=[x,y]T 做变换
通常使用2 x 3的矩阵来表示仿射变换,所以也能表示为下列形式:
仿射变换应用场景:
1.已知 X和T,求矩阵 M2.已知 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,缩放系数
缩放
平移
相关文章推荐
- OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)
- OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)
- Python-OpenCv之图像基本处理-平移,缩放,旋转,翻转,裁剪及仿射变换
- OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)
- 【计算机视觉】【图像处理】几何变换之仿射变换(平移、缩放、旋转)
- OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)
- OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)
- OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)
- OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)
- 【OpenCV & Python】图像几何变换:旋转,缩放,平移
- OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)
- 图像处理---关于像素坐标矩阵变换(平移,旋转,缩放,错切)
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- 【Android开发】图形图像处理技术-旋转、缩放、倾斜和平移图像
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- opencv 图像仿射变换 计算仿射变换后对应特征点的新坐标 图像旋转、缩放、平移
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- 数字图像处理--通过矩阵,简化操作(旋转,平移,缩放,切边....)
- OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)