簡體   English   中英

90度C ++旋轉矩陣/圖像的公式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM