pythonopencv使图片顺时针旋转任意角度的代码
时间: 2023-03-27 13:03:25 浏览: 75
以下是 Python OpenCV 使图片顺时针旋转任意角度的代码:
```python
import cv2
import numpy as np
# 读取图片
img = cv2.imread('image.jpg')
# 获取图片的高度和宽度
(h, w) = img.shape[:2]
# 设置旋转角度
angle = 45
# 计算旋转后的图像尺寸
new_w = int((w * np.abs(np.cos(np.radians(angle)))) + (h * np.abs(np.sin(np.radians(angle)))))
new_h = int((h * np.abs(np.cos(np.radians(angle)))) + (w * np.abs(np.sin(np.radians(angle)))))
# 构造旋转矩阵
M = cv2.getRotationMatrix2D((w / 2, h / 2), angle, 1.)
# 执行旋转操作
rotated = cv2.warpAffine(img, M, (new_w, new_h))
# 显示旋转后的图像
cv2.imshow("Rotated (Angle {})".format(angle), rotated)
cv2.waitKey()
```
希望能帮到你!
相关问题
用vb将图片旋转任意角度
在VB中可以使用图片控件(PictureBox)和 Graphics 类来实现图片旋转功能。
首先,在VB的窗体中添加一个图片控件(PictureBox),并将其命名为picRotate。
然后,在窗体的Load事件中,通过代码将图片加载到图片控件中:
```
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
picRotate.Image = Image.FromFile("图片路径")
End Sub
```
接下来,使用Graphics对象来旋转图片。在按钮的Click事件中添加以下代码:
```
Private Sub btnRotate_Click(sender As Object, e As EventArgs) Handles btnRotate.Click
Dim image As Image = picRotate.Image ' 获取图片控件中的图片
' 创建一个空白的位图,并设置其尺寸与原图片相同
Dim bitmap As New Bitmap(image.Width, image.Height)
' 通过Graphics对象绘制旋转后的图片
Using g As Graphics = Graphics.FromImage(bitmap)
g.TranslateTransform(image.Width / 2, image.Height / 2) ' 以图片中心点为坐标原点
g.RotateTransform(旋转角度) ' 设置旋转角度
g.TranslateTransform(-image.Width / 2, -image.Height / 2) ' 还原坐标原点
g.DrawImage(image, New Point(0, 0)) ' 绘制旋转后的图片
End Using
' 将旋转后的图片赋值给图片控件
picRotate.Image = bitmap
End Sub
```
注意,上述代码中的“旋转角度”需要替换为具体的角度值,可以是正值或负值,代表顺时针或逆时针旋转的角度。
最后,按钮按钮控件(Button)来触发旋转图片的功能。用户点击该按钮后,图片将按照设置的角度进行旋转。
C语言,二维数组顺时针旋转任意角度,逆时针旋转任意角度,如何写代码,怎么去理解,其中一种方法要用向量投影做角度琴、弦转换
对于二维数组的顺时针和逆时针旋转任意角度,可以使用向量投影来进行角度的转换。下面是一个示例的C语言代码:
```c
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
// 顺时针旋转任意角度
void rotateClockwise(float angle, int arr[][3], int rows, int cols) {
float radian = angle * PI / 180.0;
int i, j;
float cosVal = cos(radian);
float sinVal = sin(radian);
int tmp[3][3];
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
tmp[i][j] = arr[i][j];
arr[i][j] = cosVal * tmp[i][j] + sinVal * tmp[rows-1-j][i];
}
}
}
// 逆时针旋转任意角度
void rotateCounterClockwise(float angle, int arr[][3], int rows, int cols) {
float radian = angle * PI / 180.0;
int i, j;
float cosVal = cos(radian);
float sinVal = sin(radian);
int tmp[3][3];
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
tmp[i][j] = arr[i][j];
arr[i][j] = cosVal * tmp[i][j] - sinVal * tmp[j][cols-1-i];
}
}
}
int main() {
int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
printf("Original Array:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
rotateClockwise(45, arr, 3, 3);
printf("Clockwise Rotated Array:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
rotateCounterClockwise(30, arr, 3, 3);
printf("Counter Clockwise Rotated Array:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
```
在这个示例代码中,我们定义了两个函数 `rotateClockwise` 和 `rotateCounterClockwise`,分别用于顺时针和逆时针旋转任意角度。这两个函数接受一个角度参数 `angle`、一个二维数组 `arr`、以及数组的行数 `rows` 和列数 `cols`。我们使用 `cos` 和 `sin` 函数来计算角度的余弦和正弦值。
在旋转过程中,我们使用一个临时数组 `tmp` 来保存原始数组的值,避免被覆盖。根据向量投影的原理,我们可以得到新的坐标点 `(x', y')`:
- 对于顺时针旋转,新的横坐标 `x'` 为 `cos(angle) * x + sin(angle) * y`,新的纵坐标 `y'` 为 `cos(angle) * y - sin(angle) * x`。
- 对于逆时针旋转,新的横坐标 `x'` 为 `cos(angle) * x - sin(angle) * y`,新的纵坐标 `y'` 为 `cos(angle) * y + sin(angle) * x`。
在示例代码中,我们对一个3x3的数组进行了顺时针旋转45度和逆时针旋转30度,并输出旋转后的结果。
希望以上代码和解释可以帮助你理解如何在C语言中实现二维数组的顺时针和逆时针旋转任意角度。
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)