zoukankan      html  css  js  c++  java
  • C++ QT5中cv::Mat转化为QImage

    /// 转化Mat为QImage
    QImage scan::Mat2QImage(const cv::Mat& mat)
    {
        QImage img;
        int chana = mat.channels();
        /// 依据通道数不同,改变不同的装换方式
        if (chana > 1) {
            //img = QImage(static_cast<uchar *>(mat.data),mat.cols,mat.rows,QImage::Format_RGB888);
            cv::cvtColor(mat, mat, CV_BGR2RGB);
            /// construct the QImage using the data of the mat, while do not copy the data
            img = QImage((const uchar*)(mat.data),
                mat.cols,
                mat.rows,
                mat.step,//TmpMat.cols*TmpMat.channels(),
                QImage::Format_RGB888);
        }
        else if (4 == chana) {
            cv::cvtColor(mat, mat, CV_BGR2RGB);
            /// construct the QImage using the data of the mat, while do not copy the data
            img = QImage((const uchar*)(mat.data),
                mat.cols,
                mat.rows,
                mat.step,//TmpMat.cols*TmpMat.channels(),
                QImage::Format_ARGB32);
        }
        else {
            /// 单通道,灰度图
            img = QImage(mat.cols, mat.rows, QImage::Format_Indexed8);
            uchar* matdata = mat.data;
            for (int row = 0; row < mat.rows; ++row) {
                uchar* rowdata = img.scanLine(row);
                memcpy(rowdata, matdata, mat.cols);
                matdata += mat.cols;
            }
    
            QVector<QRgb>  colorTable;
    
            for (int k = 0;k < 256;++k)
            {
                colorTable.push_back(qRgb(k, k, k));
            }
    
            img.setColorTable(colorTable);
        }
        img.bits();
        return img;
    }
    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    5.21php
    5.20日报
    kubernetes
    kubernetes
    Kubernetes
    Docker
    Docker
    Docker
    Docker
    Docker
  • 原文地址:https://www.cnblogs.com/yamboo/p/13889598.html
Copyright © 2011-2022 走看看