旋转矩阵/图像90度C ++的公式

时间:2016-03-23 22:23:58

标签: c++ image matrix

假设我有图像,我需要向任何方向旋转90度,我只是无法理解如何清楚地做到这一点。我需要使用矩阵,其中宽度 - 它是X,高度 - 它是Y.我已经完成了将图像旋转180度,但无法计算出90度。

以下是示例。假设我的图像为3x4像素。宽度= 3,高度= 4,每个单元格中的数据量 - N = Width * Height = 3 * 4 = 12。让我们制作矩阵:

Here it is

轻松浏览矩阵的公式为y*Width + x。我们旋转180度的公式是:

N - Width + x - y * Width

所以我们有:

DataOut [y * Width + x] = DataIn [N - Width + x - y * Width]

使用这个公式我们得到:

this matrix

但我无法想出旋转90度的公式。你能帮帮我吗?

2 个答案:

答案 0 :(得分:2)

你可以简单地旋转矩阵:

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];
    }
}

答案 1 :(得分:0)

您可以轻松地将(x + y * width)转换为更简单的(x,y)表示。

P rotate90(int x, int y){
    return point(y, x);
}

现在,直角旋转只是一个坐标开关,可能是一个符号校正。

{{1}}

这是左撇子系统的正向旋转。 如果旋转方向错误,则从宽度减去x。