python实现图像几何属性变换
时间: 2023-08-28 14:04:55 浏览: 114
Python中可以使用OpenCV库来实现图像几何属性变换。主要包括以下几种变换:
1. 平移变换:
平移变换可以通过OpenCV库中的cv2.warpAffine()函数来实现。平移变换的矩阵为:
```
M = [1, 0, tx]
[0, 1, ty]
```
其中tx和ty分别表示x和y方向上的平移量。
示例代码:
```python
import cv2
import numpy as np
img = cv2.imread('input.jpg')
rows, cols = img.shape[:2]
# 平移变换矩阵
M = np.float32([[1, 0, 100], [0, 1, 50]])
# 执行平移变换
dst = cv2.warpAffine(img, M, (cols, rows))
cv2.imshow('input', img)
cv2.imshow('output', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
2. 旋转变换:
旋转变换可以通过OpenCV库中的cv2.getRotationMatrix2D()和cv2.warpAffine()函数来实现。旋转变换的矩阵为:
```
M = [cos(theta), -sin(theta), center_x * (1 - cos(theta)) + center_y * sin(theta)]
[sin(theta), cos(theta), center_y * (1 - cos(theta)) - center_x * sin(theta)]
```
其中theta表示旋转角度,center_x和center_y表示旋转中心的坐标。
示例代码:
```python
import cv2
import numpy as np
img = cv2.imread('input.jpg')
rows, cols = img.shape[:2]
# 旋转变换矩阵
M = cv2.getRotationMatrix2D((cols / 2, rows / 2), 45, 1)
# 执行旋转变换
dst = cv2.warpAffine(img, M, (cols, rows))
cv2.imshow('input', img)
cv2.imshow('output', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
3. 缩放变换:
缩放变换可以通过OpenCV库中的cv2.resize()函数来实现。缩放变换的矩阵为:
```
M = [sx, 0, 0]
[0, sy, 0]
```
其中sx和sy分别表示x和y方向上的缩放比例。
示例代码:
```python
import cv2
import numpy as np
img = cv2.imread('input.jpg')
# 缩放变换矩阵
M = np.float32([[0.5, 0, 0], [0, 0.5, 0]])
# 执行缩放变换
dst = cv2.warpAffine(img, M, (0, 0), fx=2, fy=2)
cv2.imshow('input', img)
cv2.imshow('output', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
4. 翻转变换:
翻转变换可以通过OpenCV库中的cv2.flip()函数来实现。翻转变换的矩阵为:
```
M = [-1, 0, cols - 1]
[0, 1, 0]
```
其中cols表示图像的宽度。
示例代码:
```python
import cv2
import numpy as np
img = cv2.imread('input.jpg')
# 翻转变换矩阵
M = np.float32([[-1, 0, img.shape[1] - 1], [0, 1, 0]])
# 执行翻转变换
dst = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))
cv2.imshow('input', img)
cv2.imshow('output', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文