OpenCV 4.5 C++版 将矩阵顺时针旋转 90 度
Posted xufulin2
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV 4.5 C++版 将矩阵顺时针旋转 90 度相关的知识,希望对你有一定的参考价值。
demo
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
Mat_<char> rotate90(Mat_<char> originMatrix)
{
// 原本 i row j col 的,顺时针旋转90度之后变成 j row i col的
Mat_<char> outputMatrix = Mat::zeros(originMatrix.cols, originMatrix.rows, CV_8SC1);
for(int y = 0; y < originMatrix.rows; ++y)
{
for(int x = 0; x < originMatrix.cols; ++x)
{
outputMatrix.at<char>(x, originMatrix.rows -1 -y) = originMatrix.at<char>(y, x);
}
}
return outputMatrix;
}
void printMatrix(Mat_<char> inputMatrix)
{
for(int y = 0; y < inputMatrix.rows; ++y)
{
for(int x = 0; x < inputMatrix.cols; ++x)
{
cout << (int)inputMatrix.at<char>(y, x) << " ";
}
cout << endl;
}
}
int main(void)
{
Mat_<char> diyMatrix = (
Mat_<char>(3, 4) << -1, 0, 1, 7,
-2, 0, 2, 8,
-1, 0, 1, 9);
// printMatrix(diyMatrix);
cout << diyMatrix << endl;
diyMatrix = rotate90(diyMatrix);
cout << diyMatrix << endl;
return 0;
}
result
[ -1, 0, 1, 7;
-2, 0, 2, 8;
-1, 0, 1, 9]
[ -1, -2, -1;
0, 0, 0;
1, 2, 1;
9, 8, 7]
解读
没啥好说的。认真想想,我们一般编号从 1 开始的,但是C/C++是从 0 开始的。
数学上,原本矩阵的 第 i 行 j 列的,旋转后变成 j 行 (n - i + 1) 列(i 和 j 都从 1 开始编号),
程序上,原本矩阵的 第 i 行 j 列的,旋转后变成 j 行 (n - 1 - i ) 列(i 和 j 都从 0 开始编号)。
认真想想,所以我们并不能让下标从 1 开始算,否则分析起来貌似没有意义。
以上是关于OpenCV 4.5 C++版 将矩阵顺时针旋转 90 度的主要内容,如果未能解决你的问题,请参考以下文章