Qt中使用QImage获取Opencv图像

//  Opencv彩色图片通道是BGR不是RGB,这里要注意
    Mat imgMat = imread("baboon.jpg", IMREAD_COLOR);

//    cvtColor(imgMat, imgMat, COLOR_BGR2GRAY);   //  转为灰度图

    QImage img;

    if(imgMat.channels() == 3)
    {
        img = QImage((const uchar*)imgMat.data,
                     imgMat.cols, imgMat.rows,
                     QImage::Format_BGR888);    //  Opencv是BGR通道
    }
    else
    {
        img = QImage((const uchar*)imgMat.data,
                     imgMat.cols, imgMat.rows,
                     QImage::Format_Grayscale8);  // 灰度图
    }

    ui->label->setPixmap(QPixmap::fromImage(img));

   //  以下时QImage转Mat
    Mat tempMat;
    QImage img("xxx.bmp");
    if(img->isGrayscale()){    //  如果图片是灰度图
        tempMat = cv::Mat(img.height(), img.width(), CV_8UC1, img.bits(),
                         img.bytesPerLine());
    }else{  //  如果图片时彩色图像
        img = img.convertToFormat(QImage::Format_BGR888);  //rgb转成bgr
        tempMat = cv::Mat(img.height(), img.width(),CV_8UC3, img.bits(),
                          img.bytesPerLine());
    }
     cv::imshow("tempMat", tempMat);

 

posted @ 2021-08-13 14:20  补码  阅读(645)  评论(0编辑  收藏  举报