从cvMat到QImage

时间:2016-05-23 07:41:13

标签: c++ qt opencv qimage opencv-mat

我想将图像从cvMat类型转换为Qimage,我的实际代码应用程序不起作用;我已经做了另一种方式(Qimage到Mat它工作正常) 请告诉我我的代码出了什么问题

这是我对Matmage的代码:

Mat qimage2mat(const QImage& qimage) {
    cv::Mat mat = cv::Mat(qimage.height(), qimage.width(), CV_8UC4, (uchar*)qimage.bits(), qimage.bytesPerLine());
    cv::Mat mat2 = cv::Mat(mat.rows, mat.cols, CV_8UC3 );
    int from_to[] = { 0,0,  1,1,  2,2 };
    cv::mixChannels( &mat, 1, &mat2, 1, from_to, 3 );
    return mat2;
}

这是我的Mat to Qimage的代码

QImage mat2qimage(const Mat& mat) {
    Mat rgb;
    cvtColor(mat, rgb, CV_BGR2RGB);
    return QImage((const unsigned char*)(rgb.data), rgb.cols, rgb.rows, QImage::Format_RGB888);
}

提前谢谢

1 个答案:

答案 0 :(得分:4)

正如@SpamBot所提到的,当Mat超出范围时,数据被释放。尝试深度复制数据:

QImage mat2qimage(const Mat& mat) 
{
    Mat rgb;
    cvtColor(mat, rgb, CV_BGR2RGB);
    return QImage((const unsigned char*)(rgb.data), rgb.cols, rgb.rows, QImage::Format_RGB888).copy();
}