『youcans 的 OpenCV 例程200篇 - 总目录』
【youcans 的 OpenCV 例程200篇】24. 图像的仿射变换
几何变换的可以分为等距变换、相似变换、仿射变换和投影变换。在很多书籍中把等距变换、相似变换都称为仿射变换,常见的仿射变换包括平移、旋转、缩放、翻转、斜切等方法。
- 等距变换:图像中的长度、面积不变,典型的等距变换是 平移、旋转。
- 相似变换:图像中的长度比、夹角、虚圆点不变,相似变换是在等距变换的基础上进行了缩放,典型的相似变换是 缩放。
- 仿射变换:图像中的平行关系、面积比、共线线段或平行线段的长度比、矢量的线性组合不变,仿射变换是旋转和非均匀缩放的复合,典型的仿射变换是 斜切。
- 投影变换:图像中的共点、共线、相交、相切、拐点的关系不变,,投影变换是在仿射变换基础上进行的非线性缩放,典型的投影变换是 透视。
仿射变换(affine)的特点是原始图像中的平行关系和线段长度比例关系保持不变。
OpenCV 中的图像以多维数组描述,通过仿射变换变换为另一个多维数组(转换图像)。
仿射变换中的校正图像在二维空间中完成,在几何上定义为一个线性变换接一个平移变换。
仿射变换由以下公式描述:
[x~y~1]=MA[xy1],MA=[a11a12a13a21a22a23001]\begin{bmatrix} \tilde{x}\\ \tilde{y}\\ 1 \end{bmatrix} = M_A \begin{bmatrix} x\\ y\\ 1 \end{bmatrix} ,\hspace{1em} M_A= \begin{bmatrix} a_{11} &a_{12} &a_{13}\\ a_{21} &a_{22} &a_{23}\\ 0 &0 &1 \end{bmatrix} ⎣⎡x~y~1⎦⎤=MA⎣⎡xy1⎦⎤,MA=⎣⎡a11a210a12a220a13a231⎦⎤
OpenCV 提供了 cv2.warpAffine 函数实现仿射变换的操作。
仿射变换矩阵 MA 中有 6 个未知参数,cv2.getAffineTransform 根据图像中不共线的 3 个点在变换前后的对应位置坐标,构造 6元一次方程组即可求出仿射变换矩阵 MA。cv2.warpAffine 再用变换矩阵 MA 计算得到变换后的图像。
基本例程:1.33 图像的仿射变换
# 1.33 仿射变换: 平移、镜像、旋转 (cv2.warpAffine)img = cv2.imread("../images/imgB2.jpg") # 读取彩色图像(BGR)rows, cols, ch = img.shapepts1 = np.float32([[50, 50], [200, 50], [50, 200]]) # 初始位置pts2 = np.float32([[50, 100], [200, 50], [100, 250]]) # 终止位置MA = cv2.getAffineTransform(pts1, pts2) # 计算 2x3 变换矩阵 MAdst = cv2.warpAffine(img, MA, (cols, rows)) # 实现仿射变换plt.figure(figsize=(9,6))plt.subplot(121), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title("Original")plt.subplot(122), plt.imshow(cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)), plt.title("warpAffine")plt.show()
(本节完)
版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125112487)
Copyright 2022 youcans, XUPT
Crated:2021-11-18
【第3章:图像的几何变换】
24. 图像的仿射变换
25. 图像的平移
26. 图像的旋转(以原点为中心)