opencv图像仿射变换(opencv 放射变换)
## OpenCV图像仿射变换### 简介图像的几何变换是指用数学模型来描述图像像素点位置的变化,常见的几何变换包括平移、旋转、缩放、镜像、仿射变换和透视变换等。其中,仿射变换是一种二维坐标的线性变换,它保持了图像的“平直性”(直线变换后依然是直线)和“平行性”(平行线变换后依然平行),常用于图像的校正、配准、拼接等领域。### 仿射变换原理仿射变换可以通过一个 2x3 的变换矩阵
M
来表示:``` M = [[a, b, c],[d, e, f]] ```其中,(a, b, c, d, e, f) 是六个参数,它们共同决定了变换的类型和程度。原始图像上的点 (x, y) 经过仿射变换后得到的新坐标 (x', y') 可以通过如下公式计算:``` x' = a
x + b
y + c y' = d
x + e
y + f ```可以将上述公式写成矩阵乘法的形式:``` [x'] [a b c] [x] [y'] = [d e f] [y] [1 ] [0 0 1] [1] ```### OpenCV实现在OpenCV中,可以使用 `cv2.warpAffine()` 函数来实现图像的仿射变换。该函数需要传入两个参数:
src
: 输入图像
M
: 变换矩阵`cv2.warpAffine()` 函数会根据变换矩阵
M
对输入图像进行仿射变换,并返回变换后的图像。#### 1. 获取变换矩阵在调用 `cv2.warpAffine()` 函数之前,需要先获取变换矩阵
M
。OpenCV 提供了 `cv2.getAffineTransform()` 函数来生成仿射变换矩阵。该函数需要传入三组对应点:
srcPoints
: 原始图像上的三个点
dstPoints
: 变换后图像上对应的三个点`cv2.getAffineTransform()` 函数会根据这三组对应点计算出最佳的仿射变换矩阵
M
。#### 2. 应用仿射变换获取到变换矩阵
M
后,就可以调用 `cv2.warpAffine()` 函数对图像进行仿射变换了。```python import cv2 import numpy as np# 读取图像 img = cv2.imread("image.jpg")# 设置变换前的三个点 pts1 = np.float32([[50, 50], [200, 50], [50, 200]])# 设置变换后的三个点 pts2 = np.float32([[10, 100], [200, 50], [100, 250]])# 生成变换矩阵 M = cv2.getAffineTransform(pts1, pts2)# 进行仿射变换 rows, cols, ch = img.shape dst = cv2.warpAffine(img, M, (cols, rows))# 显示图像 cv2.imshow("Original", img) cv2.imshow("Affine Transform", dst) cv2.waitKey(0) cv2.destroyAllWindows() ```### 总结本文介绍了OpenCV中图像仿射变换的原理和实现方法。通过使用 `cv2.getAffineTransform()` 和 `cv2.warpAffine()` 函数,可以方便地对图像进行各种仿射变换,例如平移、旋转、缩放等。
OpenCV图像仿射变换
简介图像的几何变换是指用数学模型来描述图像像素点位置的变化,常见的几何变换包括平移、旋转、缩放、镜像、仿射变换和透视变换等。其中,仿射变换是一种二维坐标的线性变换,它保持了图像的“平直性”(直线变换后依然是直线)和“平行性”(平行线变换后依然平行),常用于图像的校正、配准、拼接等领域。
仿射变换原理仿射变换可以通过一个 2x3 的变换矩阵 **M** 来表示:``` M = [[a, b, c],[d, e, f]] ```其中,(a, b, c, d, e, f) 是六个参数,它们共同决定了变换的类型和程度。原始图像上的点 (x, y) 经过仿射变换后得到的新坐标 (x', y') 可以通过如下公式计算:``` x' = a*x + b*y + c y' = d*x + e*y + f ```可以将上述公式写成矩阵乘法的形式:``` [x'] [a b c] [x] [y'] = [d e f] [y] [1 ] [0 0 1] [1] ```
OpenCV实现在OpenCV中,可以使用 `cv2.warpAffine()` 函数来实现图像的仿射变换。该函数需要传入两个参数:* **src**: 输入图像 * **M**: 变换矩阵`cv2.warpAffine()` 函数会根据变换矩阵 **M** 对输入图像进行仿射变换,并返回变换后的图像。
1. 获取变换矩阵在调用 `cv2.warpAffine()` 函数之前,需要先获取变换矩阵 **M**。OpenCV 提供了 `cv2.getAffineTransform()` 函数来生成仿射变换矩阵。该函数需要传入三组对应点:* **srcPoints**: 原始图像上的三个点 * **dstPoints**: 变换后图像上对应的三个点`cv2.getAffineTransform()` 函数会根据这三组对应点计算出最佳的仿射变换矩阵 **M**。
2. 应用仿射变换获取到变换矩阵 **M** 后,就可以调用 `cv2.warpAffine()` 函数对图像进行仿射变换了。```python import cv2 import numpy as np
读取图像 img = cv2.imread("image.jpg")
设置变换前的三个点 pts1 = np.float32([[50, 50], [200, 50], [50, 200]])
设置变换后的三个点 pts2 = np.float32([[10, 100], [200, 50], [100, 250]])
生成变换矩阵 M = cv2.getAffineTransform(pts1, pts2)
进行仿射变换 rows, cols, ch = img.shape dst = cv2.warpAffine(img, M, (cols, rows))
显示图像 cv2.imshow("Original", img) cv2.imshow("Affine Transform", dst) cv2.waitKey(0) cv2.destroyAllWindows() ```
总结本文介绍了OpenCV中图像仿射变换的原理和实现方法。通过使用 `cv2.getAffineTransform()` 和 `cv2.warpAffine()` 函数,可以方便地对图像进行各种仿射变换,例如平移、旋转、缩放等。