Программа вращает только квадратные изображения правильно
Я пытался работать с файлами 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 ответа
Вы не можете перевернуть или транспонировать неквадратную матрицу. Прежде чем приступить к математике, добавьте дополнительные строки или столбцы, чтобы сделать квадрат матрицы, выполните математику, а затем удалите добавленные столбцы или строки, чтобы получить исходное изображение без отступов.
Форма массива (ширина и высота) различна, когда изображение не прямоугольное.
Вам нужно будет повернуть массив в другой массив, чтобы индексы имели смысл.
int sourceMatrix[100][200];
int destMatrix[200][100];