Mat 与 QImage相互转换(亲测通过)

来源:互联网 发布:路径规划算法 编辑:程序博客网 时间:2024/06/02 03:03
QImage mat2QImage(const Mat& mat){    int i = mat.channels();    Mat rgb;    switch(i)    {    case 1:        cvtColor(mat,rgb,CV_GRAY2RGB);        break;    case 2://never happen        break;    case 3:        cvtColor(mat,rgb,CV_BGR2RGB);        // for debug        //cvShowImage("debug",(IplImage*)mat);        break;    case 4:        cvtColor(mat,rgb,CV_BGRA2RGB);    }    //防止偏移     return  QImage((const unsigned char*)rgb.data,rgb.cols,rgb.rows,rgb.cols*3,QImage::Format_RGB888).copy(0,0,rgb.cols,rgb.rows);}Mat qImage2Mat(const QImage& qimage){    int channel = qimage.bytesPerLine()/qimage.width();    Mat mat;    switch (channel) {    case 1:        mat = Mat(qimage.height(),qimage.width(),CV_8UC1,(uchar*)qimage.bits(),size_t(qimage.bytesPerLine()));        cvtColor(mat,mat,CV_GRAY2BGR);        break;    case 2://never happen        break;    case 3:        mat = Mat(qimage.height(),qimage.width(),CV_8UC3,(uchar*)qimage.bits(),size_t(qimage.bytesPerLine()));        cvtColor(mat,mat,CV_RGB2BGR);        break;    case 4:        mat = Mat(qimage.height(),qimage.width(),CV_8UC4,(uchar*)qimage.bits(),size_t(qimage.bytesPerLine()));        cvtColor(mat,mat,CV_RGBA2BGR);    default:        break;    }    return mat;}


0 0
原创粉丝点击