利用 OpenCV 中的 cv.getRotationMatrix2D 和 cv.warpAffine 函数实现图像 的旋转。
时间: 2024-05-10 08:14:33 浏览: 12
好的,我可以为您讲解如何利用 OpenCV 中的 cv.getRotationMatrix2D 和 cv.warpAffine 函数实现图像旋转。
首先,cv.getRotationMatrix2D 可以用来获得一个旋转矩阵,该矩阵用于旋转图像。该函数有三个参数:中心点,旋转角度和缩放比例。例如,以下代码将返回一个将图像绕中心点旋转 45 度的旋转矩阵:
```
import cv2 as cv
import numpy as np
img = cv.imread('image.jpg')
(h, w) = img.shape[:2]
center = (w // 2, h // 2)
M = cv.getRotationMatrix2D(center, 45, 1.0)
```
接下来,我们可以使用 cv.warpAffine 函数将图像应用于旋转矩阵。该函数接受三个参数:图像,旋转矩阵和输出图像大小。以下代码将应用于旋转矩阵并将其输出为旋转后的图像:
```
rotated = cv.warpAffine(img, M, (w, h))
cv.imshow('Rotated Image', rotated)
cv.waitKey(0)
```
这样,我们就可以通过 cv.getRotationMatrix2D 和 cv.warpAffine 函数来旋转图像。
相关问题
python利用OpenCV的cv2.getRotationMatrix2D()和cv2.warpAffine()函数编写一个图像旋转的程序,要求图像以自己的中心点为基准,绕顺时针旋转45°,缩放百分之50。
好的,以下是代码实现:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('example.jpg')
# 获取图像中心点坐标
rows, cols = img.shape[:2]
center = (cols/2, rows/2)
# 定义旋转矩阵
M = cv2.getRotationMatrix2D(center, -45, 0.5)
# 进行仿射变换
rotated_img = cv2.warpAffine(img, M, (cols, rows))
# 显示原始图像和旋转后的图像
cv2.imshow("Original Image", img)
cv2.imshow("Rotated Image", rotated_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
解释一下代码:
1. 使用 `cv2.imread()` 函数读取一张图像。
2. 使用 `img.shape` 获取图像的行数和列数,并计算出图像中心点的坐标。
3. 使用 `cv2.getRotationMatrix2D()` 函数获取旋转矩阵,参数分别为中心点坐标、旋转角度(这里设为-45度,表示顺时针旋转45度)、缩放比例(这里设为0.5,表示缩小50%)。
4. 使用 `cv2.warpAffine()` 函数进行仿射变换,参数分别为原始图像、旋转矩阵、输出图像大小(这里设为原始图像大小)。
5. 使用 `cv2.imshow()` 函数显示原始图像和旋转后的图像。
6. 使用 `cv2.waitKey()` 函数等待用户按下任意键。
7. 使用 `cv2.destroyAllWindows()` 函数关闭所有窗口。
cv.getRotationMatrix2D的用法
cv.getRotationMatrix2D是OpenCV中的一个函数,用于创建一个旋转矩阵。它的语法如下:
```
cv.getRotationMatrix2D(center, angle, scale)
```
其中,参数含义如下:
- center:旋转中心点的坐标,通常是一个二元组(x,y)。
- angle:旋转的角度,以度为单位。
- scale:缩放比例。
函数返回一个旋转矩阵。旋转矩阵是一个2x3的矩阵,其中包含了旋转和缩放的信息。可以将其应用于图像变换中,以实现图像的旋转和缩放。