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 開始算,否則分析起來貌似沒有意義,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/290186.html
標籤:其他
上一篇:骨刻文字數字化識別與歸類系統--PIL,opencv,base64之間的轉換
下一篇:語音深度學習常用的特征:梅爾譜
