程序仅正确旋转方形图像



我一直在尝试在C++上使用PGM文件,获取它们的底片等。 现在,一旦我开始旋转,我有一个关于我们如何旋转矩阵的粗略伪代码,这是数字矩阵的结果:

旋转矩阵测试

在纸面上,这似乎是对的。现在,当我应用相同的算法来旋转图像时,它只能在方形图像(即相同的高度和宽度(上正常工作:

旋转的方形图像

但是在矩形图像上,它会产生这样的结果:

旋转矩形图像

代码如下:

void loadRotMatrix()
{
//transpose of matrix
for(int i=0;i<cols;i++)
{
for(int j=0;j<rows;j++)
{
rotatedmatrix[i][j] = matrix[j][i];
}
}
//flipped transposed
for(int i=0;i<rows;i++)
{
int temp =0;
for(int j=0,k=cols-1;j<k;j++,k--)
{
temp=rotatedmatrix[j][i];
rotatedmatrix[j][i]=rotatedmatrix[k][i];
rotatedmatrix[k][i]=temp;
}
}
}

现在我无法解码这里发生的事情以及是什么让我的狗变成地狱犬:p

当图像不是矩形时,数组的形状(宽度和高度(会有所不同。

您需要将数组旋转到不同的数组中,以使索引有意义。

int sourceMatrix[100][200];
int destMatrix[200][100];

不能翻转或转置非方阵。在做数学之前,添加额外的行或列以制作矩阵正方形,进行数学运算,然后将添加的列或行剥离回来以获得没有填充的原始图像。

最新更新