仿射变换
2021-10-04 本文已影响0人
大龙10
《OpenCV轻松入门:面向Python》读书笔记
作者:李立宗
出版社:电子工业出版社
出版时间:2019-05
第5章 几何变换
5.3 仿射
1) 定义
仿射变换是指图像可以通过一系列的几何变换来实现平移、旋转等多种操作。该变换能够保持图像的平直性和平行性。
- 平直性
是指图像经过仿射变换后,直线仍然是直线; - 平行性
是指图像在完成仿射变换后,平行线仍然是平行线。
2) 函数
OpenCV中的仿射函数为cv2.warpAffine(),其通过一个变换矩阵(映射矩阵)M实现变换,具体为:
dst(x, y)=src(M11x+M12y+M13, M21x+M22y+M23)
如图5-2所示,可以通过一个变换矩阵M,将原始图像O变换为仿射图像R。
图5-2 仿射变换
因此,可以采用仿射函数cv2.warpAffine()实现对图像的旋转,该函数的语法格式如下:
dst=cv2.warpAffine(src, M, dsize [ , flags [ , borderMode [, borderValue]]])
式中:
- dst代表仿射后的输出图像,该图像的类型和原始图像的类型相同。dsize决定输出图像的实际大小。
- src代表要仿射的原始图像。
- M代表一个2×3的变换矩阵。使用不同的变换矩阵,就可以实现不同的仿射变换。
- dsize代表输出图像的尺寸大小。
- flags代表插值方法,默认为INTER_LINEAR。当该值为WARP_INVERSE_MAP时,意味着M是逆变换类型,实现从目标图像dst到原始图像src的逆变换。具体可选值参见表5-1。
- borderMode代表边类型,默认为BORDER_CONSTANT。当该值为BORDER_TRANSPARENT时,意味着目标图像内的值不做改变,这些值对应原始图像内的异常值。
- borderValue代表边界值,默认是0。
通过以上分析可知,在OpenCV中使用函数cv2.warpAffine()实现仿射变换,忽略其可选参数后的语法格式为:
dst=cv2.warpAffine(src, M, dsize)
其通过转换矩阵M将原始图像src转换为目标图像dst:
dst(x, y)=src(M11x+M12y+M13, M21x+M22y+M23)
因此,进行何种形式的仿射变换完全取决于转换矩阵M。