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

Я пытался сделать эту программу на c ++ с opencv, которая преобразует изображение в оттенки серого и затем поворачивает изображение, но вывод, который я получаю, запутан.

Я искал решения и искал помощь везде, но я так и не смог выяснить, какого чёрта я сделал неправильно, так что если кто-нибудь из вас может мне помочь, это было бы здорово

Код:
http://pastebin.com/FSJKyaeU

Кроме того, вот изображение вывода я получаю
http://i.imgur.com/qpYm1.jpg

3

Решение

Пожалуйста, замените:

Mat imRotate(im.cols * 2, im.rows * 2, im.type());

использовать это:

  int size = static_cast<int>(sqrt(im.cols * im.cols/4 + im.rows * im.rows/4) * 2) + 1;
Mat imRotate(size, size , im.type());

Затем обновите FuncRotate. Я думаю, что вам нужно сделать что-то вроде этого:

    void FuncRotate(Mat im, Mat imRotate, int q, int x, int y, int rows, int columns)
{
double radians = (q * 3.1415)/180; // or try use M_PI instead of 3.1415
double cosr = cos(radians);
double sinr = sin(radians);

for(int i=0; i<columns; i++) //columns of the original image
{
for(int j=0; j<rows; j++) //rows of the original image
{
int NewXPixel = imRotate.cols/2 + ((i-x) * cosr) - ((j-y) * sinr);
int NewYPixel = imRotate.rows/2 + ((i-x) * sinr) + ((j-y) * cosr);
if(NewXPixel < 0 || NewYPixel < 0 || NewXPixel >= imRotate.cols || NewYPixel >= imRotate.rows)
continue;
imRotate.at<unsigned char>(NewYPixel,NewXPixel) = im.at<unsigned char>(j,i);
}
}
}
1

Другие решения

Я думаю, что по крайней мере что-то не так в этой строке:

imRotate.at<unsigned char>(i,j) = im.at<unsigned char>(NewXPixel,NewYPixel);

… так как i а также j должны зациклить оригинальное изображение, верно?

Возможно, вы имели в виду что-то вроде:

imRotate.at<unsigned char>(NewXPixel,NewYPixel) = im.at<unsigned char>(i,j);

Также, x а также y не используются в FuncRotate,

Более того, я считаю, что вы должны инициализировать imRotate в ноль.

0

По вопросам рекламы [email protected]