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

本文介绍了如何在Qt和OpenCV之间进行Mat与QImage对象的转换。提供了两个函数,一个将OpenCV的Mat转换为Qt的QImage,另一个将QImage转换回Mat。转换过程中考虑了不同通道数的情况,并确保颜色空间的正确对应。
摘要由CSDN通过智能技术生成
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);
        br
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值