python旋转矩阵_48旋转图像旋转矩阵Python,48RotateImage

输入一个表示图像的

n

x

n

2D矩阵。将图像旋转90度(顺时针)

注意:

必须

就地

旋转图像,这意味着您必须直接修改输入2D矩阵。

不要

分配另一个2D矩阵并进行旋转。

Input: matrix=[[1,2,3],[4,5,6],[7,8,9]]

Output: [[7,4,1],[8,5,2],[9,6,3]]

上面为数字下面为旋转后之前的行列位置

由于不可以用其他矩阵,将数存入新的矩阵的想法流产,但是可以作为参考

n = np.arange(1, 17).reshape([4,4])

l=len(n)

res=np.zeros([l,l],dtype=int)

# res=[[0 for x in range(l)] for y in range(l)]

for a in range(l):

temp = 0

for b in range(l-1,-1,-1):

res[a][temp]=n[b][a]

temp+=1

print(res)

**************************

[[13 9 5 1]

[14 10 6 2]

[15 11 7 3]

[16 12 8 4]]

正儿八经的解法, 如果直接将行列换位置, 那么就会形成转置矩阵, 没有旋转90°,所以要在之前做一下矩阵的翻转。

matrix.reverse()-----------[[7, 4, 1], [8, 5, 2], [9, 6, 3]]

然后按照转置的方法将行列换位置就ok了

class Solution:

def rotate(self, matrix: List[List[int]]) -> None:

"""

Do not return anything, modify matrix in-place instead.

不要返回任何东西, 只需要修改矩阵

"""

matrix.reverse()

l=len(matrix)

for i in range(l):

for j in range(i):

matrix[i][j],matrix[j][i]=matrix[j][i],matrix[i][j]

这个方法占用内存少, 而且比较快

### 实现图像或对象的旋转和平移 对于图像或对象的旋转和平移操作,在Python中可以通过构建并应用旋转平移矩阵完成。具体来说,当处理二维空间中的点时,如果希望不仅限于围绕原点旋转还需要附加平移效果,则通常采用齐次坐标系来表达这种复合变换。 假设存在一个初始坐标\((x, y)\),通过指定的角度θ进行顺时针方向上的旋转,并沿\(x\)轴和\(y\)轴分别移动距离\(tx\)和\(ty\)。那么对应的变换过程可由下面的公式描述: \[ \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix}= \begin{bmatrix} cos(\theta) & sin(\theta) & tx\\ -sin(\theta) & cos(\theta) & ty\\ 0&0&1 \end{bmatrix}\cdot \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} \] 此方程组定义了一个新的坐标位置\((x', y')\)作为输入坐标的映射结果[^1]。 为了在实际编程环境中执行上述变换,特别是针对整个图像而非单个点的操作,推荐使用`opencv-python`库提供的功能简化流程。以下是基于该库的一个简单例子展示如何组合运用旋转与平移两种几何变换: ```python import numpy as np import cv2 def rotate_and_translate(image_path, angle, translation_x, translation_y): # 加载图像 image = cv2.imread(image_path) height, width = image.shape[:2] # 获取旋转矩阵 (绕着图像中心) rotation_matrix = cv2.getRotationMatrix2D((width / 2, height / 2), angle, scale=1.0) # 添加平移向量到旋转矩阵的最后一列 rotation_matrix[0][2] += translation_x rotation_matrix[1][2] += translation_y # 应用仿射变换 transformed_image = cv2.warpAffine(image, rotation_matrix, (width, height)) return transformed_image if __name__ == "__main__": output_img = rotate_and_translate('example.jpg', 30, 50, 70) cv2.imshow("Transformed Image", output_img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这段代码首先读取了一张图片文件,接着计算了用于表示所需旋转角度以及额外位移量的变换矩阵。最后调用了`warpAffine()`方法将这个综合变换应用于整幅图上[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值