[英]Formula of rotating matrix/image 90 degree C++
假設我有圖像,我需要在任何方向上旋轉90度,但我不明白如何做到這一點。 我需要處理矩陣,其中寬度-是X,高度-是Y。我已經完成了將圖像旋轉180度的操作,但無法確定90度。
這里是例子。 假設我有一張3x4像素的圖片。 寬度= 3,高度= 4,每個單元格中的數據量N = Width * Height = 3 * 4 = 12
。 讓我們做一個矩陣:
容易通過矩陣的公式是y*Width + x
。 我們旋轉180度的公式是:
N - Width + x - y * Width
因此,我們有:
DataOut [y * Width + x] = DataIn [N - Width + x - y * Width]
使用此公式,我們得到:
但是我無法提出旋轉90度的公式。 你能幫我嗎?
您可以通過以下方法簡單地旋轉矩陣:
for(int i=0; i<cols; i++)
{
for(int j=1; j<=rows; j++)
{
datOut[i][j]= datIn[rows-j][i];
}
}
並在一維數組中:
for(int i=0; i<cols; i++)
{
for(int j=1; j<=rows; j++)
{
datOut[i * rows + j]= datIn[(rows-j) * cols + i];
}
}
您可以輕松地將(x + y *寬度)轉換為更簡單的(x,y)表示形式。
using P = point_data_type;
P point(int x, int y){
return DataIn[x + y * width]; // N - ...?
}
現在,直角旋轉只是一個坐標開關,也許是一個符號校正。
P rotate90(int x, int y){
return point(y, x);
}
在左撇子系統中這是正旋轉。 如果旋轉方向錯誤,則從Width中減去x。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.