48. Rotate Image(矩阵翻转)



一. 题目来源:

leetcode 48. Rotate Image

二. 题目大意:

给定一个n*n的矩阵,要求在原地址空间上实现顺时针翻转90度,时间效率无限制,空间效率O(1)

三. 我的思路:

1. 如果空间没有限制,那么很简单,只要再开一个n×n的数组空间,然后对原数组每一组(a,b),其中( 0 <= a < n,  0 <= b < n),只要计算(a,b)顺时针旋转

90度后的坐标位,然后在新数组上拷贝上去即可,时间效率O(n × n), 空间效率 O(n × n)

        2. 但是题要求是在原址上移位,根据老司机多年经验,这种东西一般都能有循环可以解决,然后就在纸上涂涂画画,然后发现会四组一个循环,下面是循环图

  (a, b) ---------> (n-b, a) ----------> (n-a , n-b) --------------> (b, n-a) ----------------> (a, b)

 找到循环图,然后代码实现就很简单了,下面是代码

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int size = matrix.size();
        if(size == 0 || size == 1) return; 
        int term;
        for(int i = 0; i < floor(size / 2.0); i++)
            for(int j = i; j < size - 1 - i; j++){
                term = matrix[i][j];
                matrix[i][j] = matrix[size - 1 - j][i];
                matrix[size - 1 - j][i] = matrix[size - 1 - i][size - 1 - j];
                matrix[size - 1 - i][size - 1 - j] = matrix[j][size - 1 - i];
                matrix[j][size - 1 - i] = term;
            }
        return;
    }
};

在Jupyter Lab中,通常使用数据可视化库如Pandas的`matplotlib`或更专业的图像处理库`OpenCV`或`scikit-image`来进行图像操作,包括平移、旋转、缩放等。其中,基于变换矩阵的处理可以提供更高的灵活性。 1. 图像平移:`transform`模块的`Affine2D`可以创建二维仿射变换对象,通过设置平移的偏移量来实现图像移动。 2. 旋转:`rotate()`函数可以对图像进行旋转,比如使用`skimage.transform.rotate()`或`plt.imshow(transformed_image)`配合`Affine2D`对象。 3. 缩放:`scale()`或`zoom()`函数可以调整图像大小,例如` Affine2D(scale=(scale_factor, scale_factor))`。 4. Resize缩放:`resize()`函数在`PIL`(Python Imaging Library)中用于改变图像尺寸,例如`Image.resize(size, resample=Image.LANCZOS)`。 5. 剪切:需要先确定剪切区域,然后使用`crop()`函数,比如`cropped_image = image.crop((left, top, right, bottom))`。 6. 水平翻转:`flip_left_right()`或`horizontal_flip()`可以实现水平翻转,对于`numpy`数组,可以使用`np.fliplr(image)`;对于`OpenCV`,则有`cv2.flip()` 为了完成所有这些操作,首先你需要加载图片,然后创建并应用相应的变换矩阵,最后将变换后的图像显示出来: ```python import matplotlib.pyplot as plt from skimage.transform import AffineTransform # 加载图像 img = plt.imread('your_image.jpg') # 创建变换对象 transformation = AffineTransform(translation=(dx, dy) if you want translation else None, rotation=np.radians(rotation_angle), scale=(scale_factor, scale_factor)) # 应用变换 transformed_img = transformation(img) # 显示原图和变换后的图 fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2) ax1.imshow(img) ax2.imshow(transformed_img) # 保存或展示 plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值