当前位置: 首页 > news >正文

QImage Mat IplImage 之间的相互转换

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

  • Mat(opencv) 与 QImage(Qt) 之间互转
// Mat to QImage
QImage cvMat2QImage(const cv::Mat& mat)  
{  
    // 8-bits unsigned, NO. OF CHANNELS = 1  
    if(mat.type() == CV_8UC1)  
    {  
        QImage image(mat.cols, mat.rows, QImage::Format_Indexed8);  
        // Set the color table (used to translate colour indexes to qRgb values)  
        image.setColorCount(256);  
        for(int i = 0; i < 256; i++)  
        {  
            image.setColor(i, qRgb(i, i, i));  
        }  
        // Copy input Mat  
        uchar *pSrc = mat.data;  
        for(int row = 0; row < mat.rows; row ++)  
        {  
            uchar *pDest = image.scanLine(row);  
            memcpy(pDest, pSrc, mat.cols);  
            pSrc += mat.step;  
        }  
        return image;  
    }  
    // 8-bits unsigned, NO. OF CHANNELS = 3  
    else if(mat.type() == CV_8UC3)  
    {  
        // 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_RGB888);  
        return image.rgbSwapped();  
    }  
    else if(mat.type() == CV_8UC4)  
    {  
        qDebug() << "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.copy();  
    }  
    else  
    {  
        qDebug() << "ERROR: Mat could not be converted to QImage.";  
        return QImage();  
    }  
}

// QImage to Mat  
cv::Mat QImage2cvMat(QImage image)  
{  
    cv::Mat mat;  
    qDebug() << image.format();  
    switch(image.format())  
    {  
    case QImage::Format_ARGB32:  
    case QImage::Format_RGB32:  
    case QImage::Format_ARGB32_Premultiplied:  
        mat = cv::Mat(image.height(), image.width(), CV_8UC4, (void*)image.constBits(),
                      image.bytesPerLine());  
        break;  
    case QImage::Format_RGB888:  
        mat = cv::Mat(image.height(), image.width(), CV_8UC3, (void*)image.constBits(), 
                      image.bytesPerLine());  
        cv::cvtColor(mat, mat, CV_BGR2RGB);  
        break;  
    case QImage::Format_Indexed8:  
        mat = cv::Mat(image.height(), image.width(), CV_8UC1, (void*)image.constBits(), 
                      image.bytesPerLine());  
        break;  
    }  
    return mat;  
}
  • Mat 与 IplImage 之间相互转换  
// cv::Mat to IplImage
cv::Mat matimg = cv::imread ("heels.jpg");
IplImage* iplimg;
*iplimg = IplImage(matimg);


// IplImage to cv::Mat
IplImage* iplimg = cvLoadImage("heels.jpg");
cv::Mat matimg;
matimg = cv::Mat(iplimg);
  • Reference
  1. http://blog.csdn.net/liyuanbhu/article/details/46662115
  2. http://blog.csdn.net/caroline_wendy/article/details/16940895

转载于:https://my.oschina.net/wellsoschina/blog/1570848

相关文章:

  • visual studio如何附加到进程调试python命令
  • 大数据时代的全能日志分析专家--Splunk安装与实践
  • 微软今天发布Windows 7/Server 2008 R2 SP1 RC候选版
  • mariadb的日志
  • 内存数据的十六进制Print
  • 1.4linux单用户模式下修改root密码和救援模式修改root密码
  • 跨进程通信之Messenger
  • 记录一次处理https监听不正确的过程
  • sed常见操作
  • 解读userenv的日志
  • pt-table-checksum和pt-table-sync的用法总结
  • 与oom-killer的亲密接触
  • python 中 sort() 用法
  • 参数FAST_START_MTTR_TARGET的理解
  • Mysql数据库的备份与还原
  • hexo+github搭建个人博客
  • Date型的使用
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ES6--对象的扩展
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • React-redux的原理以及使用
  • Sequelize 中文文档 v4 - Getting started - 入门
  • TypeScript迭代器
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 排序(1):冒泡排序
  • 排序算法学习笔记
  • 前端
  • 前端攻城师
  • 嵌入式文件系统
  • 深入 Nginx 之配置篇
  • 思维导图—你不知道的JavaScript中卷
  • 通过几道题目学习二叉搜索树
  • 微信支付JSAPI,实测!终极方案
  • 我感觉这是史上最牛的防sql注入方法类
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 学习ES6 变量的解构赋值
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 通过调用文摘列表API获取文摘
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​插件化DPI在商用WIFI中的价值
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #14vue3生成表单并跳转到外部地址的方式
  • #Spring-boot高级
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (3)nginx 配置(nginx.conf)
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (八)Spring源码解析:Spring MVC
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)VC++中ondraw在什么时候调用的
  • .java 9 找不到符号_java找不到符号
  • .NET 中 GetProcess 相关方法的性能
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...