Convert Mat to QPixmap
Solution 1
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));
Solution 2
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/
user2354422
Updated on June 05, 2022Comments
-
user2354422 almost 2 years
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.
-
Muhammet Ali Asan over 8 yearsYou 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 starting
-
wambach about 8 yearsas additional information to this solution (as told in stackoverflow.com/a/12312326/2590275) 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.
-
d34th4ck3r almost 7 yearsThis isn't working for Mat3b. What exactly could be the reason?
-
Milind Morey over 5 yearsQPixmap pix= QPixmap::fromImage(QImage((unsigned char*) img.data, img.cols, img.rows, QImage::Format_RGB888).rgbSwapped()); ui->mylable->setPixmap(pix);
-
Yang Hanlin about 3 yearsAfter Qt 5.14 there is a new QImage format
QImage::Format_BGR888
so a better method is to specify the format asQImage::Format_BGR888
and no need to convert colors now.