Qt中cvMat与QImage,QPixmap的转换
Published on 2022-05-27 09:40 in 分类: Qt with 萧海~
分类: Qt

Qt中cvMat与QImage,QPixmap的转换

    QImage->cvMat:

    Mat CameraThread::QImageTocvMat(QImage img)
    {
    Mat ToCvMat;
    switch (img.format())
    {
    case QImage::Format_RGB888:
    ToCvMat = Mat(img.height(), img.width(), CV_8UC3, (void*)img.bits(), img.bytesPerLine());
    cv::cvtColor(ToCvMat, ToCvMat, CV_BGR2RGB);
    break;
    case QImage::Format_ARGB32:
    case QImage::Format_RGB32:
    case QImage::Format_ARGB32_Premultiplied:
    ToCvMat = Mat(img.height(), img.width(), CV_8UC4, (void*)img.bits(), img.bytesPerLine());
    break;
    case QImage::Format_Indexed8:
    ToCvMat = Mat(img.height(), img.width(), CV_8UC1, (void*)img.bits(), img.bytesPerLine());
    break;
    }
    return ToCvMat;
    }

    cvMat->QImage:

    QImage CameraThread::cvMat2QImage(const cv::Mat& cvImg)
    {
    QImage qImg;
    if (cvImg.channels() == 3) //三通道彩色图像
    {
    //CV_BGR2RGB
    cv::cvtColor(cvImg, cvImg, CV_RGB2BGR);
    qImg = QImage((const unsigned char*)(cvImg.data), cvImg.cols, cvImg.rows, cvImg.cols*cvImg.channels(), QImage::Format_RGB888);
    }
    else if (cvImg.channels() == 1) //单通道(灰度图)
    {
    qImg = QImage((const unsigned char*)(cvImg.data), cvImg.cols, cvImg.rows, cvImg.cols*cvImg.channels(), QImage::Format_Indexed8);
    QVector<QRgb> colorTable;
    for (int k = 0; k<256; ++k)
    {
    colorTable.push_back(qRgb(k, k, k));
    }
    qImg.setColorTable(colorTable);//把qImg的颜色按像素点的颜色给设置
    }
    else
    {
    qImg = QImage((const unsigned char*)(cvImg.data), cvImg.cols, cvImg.rows, cvImg.cols*cvImg.channels(), QImage::Format_RGB888);
    }
    return qImg;
    }

    QPixmap->QImage:

    QPixmap pixmap;
    QImage image=pixmap.toImage();

    QImage->QPixmap:

    QImage image;
    QPixmap pixmap=QPixmap::fromImage(image);

    原文:https://blog.csdn.net/weixin_39485901/article/details/88078406

    posted @   萧海~  阅读(344)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · winform 绘制太阳,地球,月球 运作规律
    · AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
    · 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
    · 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
    · 上周热点回顾(3.3-3.9)
    点击右上角即可分享
    微信分享提示
    电磁波切换