Программа вращает только квадратные изображения правильно - PullRequest
0 голосов
/ 22 сентября 2018

Я пытался работать с файлами PGM на C ++, получать их негативы и т. Д. Теперь, когда я начал вращаться, у меня был грубый псевдокод о том, как мы будем вращать матрицу, вот результат для числовой матрицы:

Проверка повернутой матрицы

На бумаге это кажется правильным.Теперь, когда я применяю тот же алгоритм для поворота изображений, он корректно работает только на квадратном изображении (т.е. с одинаковой высотой и шириной):

Повернутое квадратное изображение

Но напрямоугольные изображения, это дает такой результат:

Повернутое изображение прямоугольника

Вот код:

   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

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Вы не можете переворачивать или транспонировать неквадратную матрицу.Прежде чем приступить к математике, добавьте дополнительные строки или столбцы, чтобы сделать квадрат матрицы, выполните математику, а затем удалите добавленные столбцы или строки, чтобы получить исходное изображение без отступов.

0 голосов
/ 22 сентября 2018

Форма массива (ширина и высота) различна, когда изображение не прямоугольное.

Вам потребуется повернуть массив в другой массив, чтобы индексы имели смысл.

int sourceMatrix[100][200];

int destMatrix[200][100];
...