【问题标题】:Program only rotates square images properly程序仅正确旋转方形图像
【发布时间】:2018-09-22 10:18:22
【问题描述】:

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

Rotated matrix test

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

Rotated Square Image

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

Rotated Rectangle image

代码如下:

   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

【问题讨论】:

    标签: c++ multidimensional-array pgm


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      您不能翻转或转置非方阵。在进行数学运算之前,添加额外的行或列以形成一个矩阵正方形,进行数学运算,然后剥离添加的列或行以得到没有填充的原始图像。

      【讨论】:

      • 那不会导致图片被截断吗?我无法处理你是如何填充矩阵的
      • 如果行>列(添加额外的列),如果行
      • 如果不是太麻烦,你能想象一下你想说什么吗?我对矩阵操作很陌生:)
      猜你喜欢
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多