Почему в моей Qt5 QPixmap неправильно отображаются кадры, обработанные некоторыми алгоритмами OpenCV? - PullRequest
0 голосов
/ 23 марта 2020

Заранее благодарю за поддержку.

Я использую OpenCV для обработки видеокадров, снятых видеокамерой, и показываю обработанные кадры в виде простого GUI, реализованного в Qt5. В GUI изображения отображаются с использованием QPixmap в метке. Алгоритмы OpenCV должны быть правильными, поскольку, если я пишу, выходные данные верны, и они в основном являются некоторыми примерами, предоставленными OpenCV.

Я реализовал различные обработки: для преобразования из цветовой шкалы в серую и для двоичной порог (см. изображение 1 ), результаты в порядке (этот «вид» камеры правильный). Тем не менее, при попытке отобразить («в режиме реального времени») обнаружения ключевых точек (используя SURF -представление изображения 2 -) и контуры обнаружения (используя Canny -see image 3 -), отображаемые изображения выглядят странно.

Основная проблема заключается в том, что они кажутся одновременно "намного ближе" (см. 2 ) и двойными (см. 3 ).

В используемом мной коде Qt:

ui->labelView->setScaledContents(true);

Я выполняю преобразование обработанного кадра OpenCV в QImage, используя:

QImage output((const unsigned char*) _frameProcessed.data, _frameProcessed.cols, _frameProcessed.rows, QImage::Format_Indexed8);

И отображаю изображение используя:

ui->labelView->setPixmap(QPixmap::fromImage(frame));

GUI и обработка OpenCV выполняются в разных потоках: я перемещаю обработку изображения в поток в начальной настройке.

Если вам нужна дополнительная информация, пожалуйста, просто дайте мне знать.

Большое спасибо заранее!

С уважением,

Binary Threshold image

enter image description here

enter image description here

1 Ответ

2 голосов
/ 23 марта 2020

Как указывало @ Micka , это было связано с форматами изображений. Я нашел этот удобный код , предоставляющий функции для автоматического c преобразования между форматами OpenCv и Qt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...