opencv mat转qimage
QVector<QRgb> g_clrtable; for(int i = 0; i < 256; i++) { g_clrtable.push_back(QColor(i, i, i).rgb()); } QImage cvMat2QImage(const cv::Mat &mat) { // 8-bits unsigned, NO. OF CHANNELS = 1 if(mat.empty()){ return QImage(); } if(mat.type() == CV_8UC1) { uchar *pSrc = mat.data; QImage image(pSrc, mat.cols, mat.rows, mat.cols, QImage::Format_Indexed8); // Set the color table (used to translate colour indexes to qRgb values) image.setColorTable(g_clrtable); return image; } else if(CV_16UC1 == mat.type()){ cv::Mat mat256 = mat / 256; cv::Mat mat8; mat256.convertTo(mat8, CV_8UC1); QImage image(mat8.data, mat8.cols, mat8.rows, mat8.cols, QImage::Format_Indexed8); // Set the color table (used to translate colour indexes to qRgb values) image.setColorTable(g_clrtable); return image; } // 8-bits unsigned, NO. OF CHANNELS = 3 else if(mat.type() == CV_8UC3) { const uchar *pSrc = (const uchar*)mat.data; // Create QImage with same dimensions as input Mat QImage image(pSrc, mat.cols, mat.rows, mat.step, QImage::Format_RGB888); return image.rgbSwapped(); } else if(mat.type() == CV_8UC4) { // Copy input Mat const uchar *pSrc = (const uchar*)mat.data; // Create QImage with same dimensions as input Mat QImage image(pSrc, mat.cols, mat.rows, mat.step, QImage::Format_ARGB32); return image /*image.copy()*/; } else { qWarning() << "mat type unsupport:" << mat.type(); return QImage(); } }