Convert Mat to QPixmap

11,891

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/

Share:
11,891
user2354422
Author by

user2354422

Updated on June 05, 2022

Comments

  • user2354422
    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
    Muhammet Ali Asan over 8 years
    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 starting
  • wambach
    wambach about 8 years
    as 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
    d34th4ck3r almost 7 years
    This isn't working for Mat3b. What exactly could be the reason?
  • Milind Morey
    Milind Morey over 5 years
    QPixmap pix= QPixmap::fromImage(QImage((unsigned char*) img.data, img.cols, img.rows, QImage::Format_RGB888).rgbSwapped()); ui->mylable->setPixmap(pix);
  • Yang Hanlin
    Yang Hanlin about 3 years
    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.