Convert Mat to QPixmap
Asked Answered
G

2

7

How can we convert directly cv::Mat to QPixmap without going through filename loading?

I have made some research about it but no hints!

As a first step, what I have tried is that I save the image, and then load it. But it's not what I want to have.

Grillparzer answered 7/5, 2013 at 13:48 Comment(4)
You could probably use the function QPixmap::loadFromData(...) to load the field cv::Mat::data directly into the QPixmap. I never tried to do such a thing though.Eastsoutheast
And by the way, possible duplicate since it's easy to switch between Qimage and QPixmap.Eastsoutheast
And how to switch between QImage and QPixmap?Grillparzer
Cannot be easier: QPixmap::fromImage().Eastsoutheast
T
13

Jehan is right.

For people referring to this thread in the future: First convert image from BGR(used by OpenCV) to RGB.

Then:

QPixmap::fromImage(QImage((unsigned char*) mat.data, mat.cols, mat.rows, QImage::Format_RGB888));
Tall answered 16/8, 2013 at 10:38 Comment(4)
You can also use QPixmap::fromImage(QImage((unsigned char*) mat.data, mat.cols, mat.rows, QImage::Format_RGB888).rgbswapped()); so you dont have to convert image before startingWhitcomb
This isn't working for Mat3b. What exactly could be the reason?Boorman
QPixmap pix= QPixmap::fromImage(QImage((unsigned char*) img.data, img.cols, img.rows, QImage::Format_RGB888).rgbSwapped()); ui->mylable->setPixmap(pix);Yammer
After Qt 5.14 there is a new QImage format QImage::Format_BGR888 so a better method is to specify the format as QImage::Format_BGR888 and no need to convert colors now.Tony
P
3

Mehfoos Yacoob is right, that is the best way to convert a cv::Mat to a QPixmap. First, you need to convert the cv::Mat to a QImage, and then using the fromImage function, assign its result to a QPixmap. It is important to keep in mind the type of the cv::Mat in order to use the correct QImage format.

This is a little example of how to do it: http://asmaloney.com/2013/11/code/converting-between-cvmat-and-qimage-or-qpixmap/

Pallor answered 19/5, 2015 at 23:24 Comment(1)
as additional information to this solution (as told in https://mcmap.net/q/337426/-how-to-convert-an-opencv-cv-mat-to-qimage) is that "some images won't show properly without it." -> add the mat.step as 4th parameter. The example linked above to asmaloney also includes that parameter it his calls.Sip

© 2022 - 2024 — McMap. All rights reserved.