OpenCV第6课 图像处理之几何变换(仿射)
1.仿射变换
2. 平移
3 旋转
附录A 二维旋转矩阵
附录B 三维旋转矩阵与轴角表示
1.仿射变换
仿射变换是指图像可以通过一系列的几何变换来实现平移、旋转等多种操作。该变换能够保持图像的平直性和平行性。
平直性是指图像经过仿射变换后,直线仍然是直线,平行性是指图像在完成仿射变换后,平行线仍是平行线。
平移和旋转都是仿射变换的特例,所用函数都是cv2.warpAffine,其通过一个变换矩阵(映射矩阵)M实现变换,平移和旋转转换矩阵不同。具体为:
如下图,可以通过一个变换矩阵M,将原始图像O变换为仿射图像R。
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的逆变换。具体可选值:borderMode代表边类型,默认为BORDER_CONSTANT。当该值为BORDER_TRANSPARENT时,意味着目标图像内的值不做改变,这些值对应原始图像内的异常值。
- borderValue:代表边界值,默认是0。
通过以上分析可知,在OpenCV中使用函数cv2.warpAffine()实现仿射变换,忽略其可选参数后的语法格式为:
dst = cv2.warpAffine( src , M , dsize )
其通过转换矩阵M 将原始图像src 转换为目标图像dst:
因此,进行何种形式的仿射变换完全取决于转换矩阵M。下面分别介绍通过不同的转换矩阵M实现的不同的仿射变换。
2. 平移
平移是物体的移动,如果知道物体平移的坐标,可以创建如下变换矩阵:
将其放入类型为np.float32的数组中,将M矩阵赋值给cv2.warpAffine() 函数,即可实现平移。
例程如下: