利用 OpenCV 中的 cv.getRotationMatrix2D 和 cv.warpAffine 函数实现图像 的旋转。
时间: 2024-05-10 13:14:33 浏览: 261
好的,我可以为您讲解如何利用 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 函数来旋转图像。
相关问题
angle = 45 center = (gray.shape[1] // 2, gray.shape[0] // 2)# 生成旋转矩阵 M = cv2.getRotationMatrix2D(center, angle, scale=0.8)# 计算旋转后的图像尺寸 max_dim = max(gray.shape) rotated_size = (max_dim, max_dim)# 执行旋转操作 rotated = cv2.warpAffine(gray, M, rotated_size, flags=cv2.INTER_LINEAR)# 显示旋转后的图像 cv2.imshow('Rotated Image', rotated)# 等待按键响应 cv2.waitKey(0)# 释放窗口 cv2.destroyAllWindows() plt.imshow(rotated) plt.show()
这段代码使用了OpenCV库和Matplotlib库,实现了对图像进行旋转和显示旋转后的图像。代码中的变量含义和作用如下:
- `gray`:输入的灰度图像。
- `angle`:旋转角度。
- `center`:旋转中心点,这里取图像中心点。
- `scale`:缩放比例,默认为1。
- `M`:旋转矩阵,通过`cv2.getRotationMatrix2D()`函数生成。
- `max_dim`:旋转后的图像尺寸,为旋转前的最大尺寸。
- `rotated_size`:旋转后的图像尺寸,为一个元组。
- `rotated`:执行旋转操作得到的旋转后的图像。
- `flags`:插值方法,默认为`cv2.INTER_LINEAR`。
- `cv2.imshow()`:显示旋转后的图像。
- `cv2.waitKey()`:等待按键响应。
- `cv2.destroyAllWindows()`:释放窗口。
- `plt.imshow()`:显示旋转后的图像。
- `plt.show()`:显示图像。
需要注意的是,这段代码需要先导入以下库:
``` python
import cv2
import matplotlib.pyplot as plt
```
同时,你需要将`gray`替换为你自己的灰度图像。
import cv2 img = cv2.imread('D:/Download/windows_v1.6.0/img/99.jpg') # 把图片像素的行数,列数返回给rows,cols rows, cols, _ = img.shape # 旋转角度 angle = 45 # 计算旋转矩阵 M = cv2.getRotationMatrix2D((cols / 2, rows / 2), angle, 1) # 旋转图片 rotated_img = cv2.warpAffine(img, M, (cols, rows)) # 显示结果图像 cv2.imshow('xx', img) cv2.imshow('Rotated Image', rotated_img) cv2.waitKey(0) cv2.destroyAllWindows()
这段代码使用OpenCV库对一张图片进行了旋转操作,具体步骤如下:
1. 使用cv2.imread()函数加载图片,将像素矩阵读入内存。
2. 使用img.shape获取图片的像素行数和列数(rows, cols)。
3. 指定旋转角度angle。
4. 使用cv2.getRotationMatrix2D()函数计算旋转矩阵M,该矩阵用于将图片旋转指定角度。
5. 使用cv2.warpAffine()函数,通过旋转矩阵M对图片进行旋转操作,得到旋转后的图片rotated_img。
6. 使用cv2.imshow()函数显示原始图片img和旋转后的图片rotated_img。
7. 使用cv2.waitKey()函数等待用户按下任意键。
8. 使用cv2.destroyAllWindows()函数关闭所有打开的窗口。
需要注意的是,该段代码中的图片路径需要根据实际情况进行修改。
阅读全文