@krox
аспирант, программист, исследователь

При соотношении сторон отличном от 4:3 изображение при конвертации из IplImage в QImage искажается. Как исправить код?

Всем здравствуйте. Разрабатываю программку по обработке изображений по учёбе на С++, OpenCV и QT. Как правило используется соотношение сторон 4 к 3. Программка работает нормально. Как только загружаем изображение отличное от этого соотношения сторон, получаемое изображение едет.
Нормальные изображения:
Оригинал:
12675dc23fc24f5282bcd7aaddc66ec2.jpg
Вывод программы: c4840536e3a44cd4a0733291c46cfce5.png
.
Соответственно, когда соотношение сторон другое:
6da41dd6c068439fab5b677efeaa231a.jpg
получается следующее:
33de5f1594ab4b4f9d4c40aa3abf91f3.png.
Все преобразования происходят в OpenCV.
Итоговая картинка выводится на форму и сохраняется из QImage, и вот, когда мы передаём картинку в IplImage в функцию для получения QImage у нас и происходит искажение.

код функции IplImage2QImage, в котором происходит искажение при неправильном соотношении сторон картинки.
QImage MainWindow::IplImage2QImage(const IplImage *iplImage)
{
    //http://josedolz.jimdo.com/computer-vision-tutorials/iplimage-to-qimage/
       int height = image_original->height(); //iplImage->height;
       int width = image_original->width();//iplImage->width;
       const uchar *qImageBuffer =(const uchar*)iplImage->imageData;
       QImage img(qImageBuffer, width, height, QImage::Format_RGB888);

       return img.rgbSwapped();
}


Собственно, вопрос: как исправить данный код, чтобы он корректно отрабатывал и для других соотношений сторон изображения?
  • Вопрос задан
  • 2676 просмотров
Пригласить эксперта
Ответы на вопрос 2
@DancingOnWater
У меня подозрение, что проблема не тут, а в том, как вы этот image выводится, либо у вас изображение подается с альфаканалом, а вы сообщаете, что его нет
Ответ написан
Obukhoff
@Obukhoff
Программист С++
Моё подозрение что opencv хранит строку пикселей с выравниванием по некоторому размеру буфера.
При преобразования хвост строки пикселов залезает на следующую строку и получается что каждая последующая строка уезжает на пиксель/другой.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы