2013-05-07 3 views
3

Как мы можем напрямую конвертировать cv :: Mat в QPixmap без загрузки имени файла?Преобразование Mat в QPixmap

Я сделал несколько исследований об этом, но никаких намеков!

В качестве первого шага я попытался сохранить изображение и загрузить его. Но это не то, что я хочу.

+0

Вы могли бы использовать функцию 'QPixmap :: loadFromData (...)', чтобы загрузить поле 'резюме :: Mat :: data' напрямую в 'QPixmap'. Однако я никогда не пытался это сделать. – Jehan

+0

И, кстати, [возможно дублировать] (http://stackoverflow.com/questions/5026965/how-to-convert-an-opencv-cvmat-to-qimage), так как легко переключаться между Qimage и QPixmap. – Jehan

+0

И как переключаться между QImage и QPixmap? – user2354422

ответ

5

Jehan is right.

Для людей, обращаясь к этой теме в будущем: Сначала преобразуйте изображение из BGR (используется OpenCV) в RGB.

Тогда:

QPixmap::fromImage(QImage((unsigned char*) mat.data, mat.cols, mat.rows, QImage::Format_RGB888)); 
+0

Вы также можете использовать QPixmap :: fromImage (QImage ((unsigned char *) mat.data, mat.cols, mat.rows, QImage :: Format_RGB888) .rgbswapped()); поэтому вам не нужно преобразовывать изображение перед запуском –

+0

Это не работает для Mat3b. Что именно может быть причиной? – d34th4ck3r

1

Mehfoos Yacoob прав, что это лучший способ, чтобы преобразовать cv::Mat в QPixmap. Во-первых, вам необходимо преобразовать cv::Mat в QImage, а затем с помощью функции fromImage присвойте свой результат QPixmap. Важно иметь в виду тип cv::Mat, чтобы использовать правильный формат QImage.

Это небольшой пример того, как это сделать: http://asmaloney.com/2013/11/code/converting-between-cvmat-and-qimage-or-qpixmap/

+0

в качестве дополнительной информации к этому решению (как сказано в http://stackoverflow.com/a/12312326/2590275) заключается в том, что «некоторые изображения не будут отображаться должным образом без него». -> добавьте mat.step в качестве 4-го параметра. Пример, приведенный выше к [asmaloney] (http://asmaloney.com/2013/11/code/converting-between-cvmat-and-qimage-or-qpixmap/), также включает в себя этот параметр, который он вызывает. – wambach