OpenCV 90°旋转

顺时针旋转90°思路

原始图像像素矩阵2行2列:

| 1 | 2 |   
---------
| 3 | 4 | 
| 1 | 2 |     T        | 1 | 3 |     Y轴镜像    | 3 | 1 |
---------   ------->   ---------   ------->    ---------
| 3 | 4 |              | 2 | 4 |               | 4 | 2 |

逆时针旋转90°思路

| 1 | 2 |     T        | 1 | 3 |     X轴镜像    | 2 | 4 |
---------   ------->   ---------    ------->   ---------
| 3 | 4 |              | 2 | 4 |               | 1 | 3 |

OpenCV代码

#include <iostream>
#include <string>
#include <vector>

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace std;
using namespace cv;

void myRotateClockWise90(Mat &src)
{
    if (src.empty())
    {
        return;
    }
    // 矩阵转置
    transpose(src, src); 
    //0: 沿X轴翻转; >0: 沿Y轴翻转; <0: 沿X轴和Y轴翻转
    flip(src, src, 1);
}


void myRotateAntiClockWise90(Mat &src)
{
    if (src.empty())
    {
        return;
    }
    transpose(src, src);
    flip(src, src, 0);
}


int main(int argc, char* argv[])
{
    const string imgpath = "D:/opencv.jpg";
    Mat src = imread(imgpath, 1);
    Mat srcT;
    transpose(src, srcT);
    imwrite("D:/opencvT.jpg", srcT);

    Mat srcClockWise90 = src.clone();
    myRotateClockWise90(srcClockWise90);
    imwrite("D:/opencvCW90.jpg", srcClockWise90);

    Mat srcAntiClockWise90 = src.clone();
    myRotateAntiClockWise90(srcAntiClockWise90);
    imwrite("D:/opencvACW90.jpg", srcAntiClockWise90);
    return 0;
}

测试结果

  • 输入图像

opencv

  • 输入图像的矩阵转置

opencvT

  • 输入图像顺时针旋转90°后的图像

opencvCW90

  • 输入图像逆时针选择90°后的图像

opencvACW90

参考

opencv 图片旋转90度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Digital2Slave

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值