QT处理图像用的是QImage类,而OpenCV处理图像则是使用cv::Mat类,如果要在QT中运用OpenCV,那就需要进行QImage和Mat的相互转换。

// cv::Mat转换成QImage
QImage cvMat2QImage(const Mat& mat)
{if (mat.type() == CV_8UC1)                          // 单通道{QImage image(mat.cols, mat.rows, QImage::Format_Indexed8);image.setColorCount(256);                       // 灰度级数256for (int i = 0; i < 256; i++){image.setColor(i, qRgb(i, i, i));}uchar *pSrc = mat.data;                         // 复制mat数据for (int row = 0; row < mat.rows; row++){uchar *pDest = image.scanLine(row);memcpy(pDest, pSrc, mat.cols);pSrc += mat.step;}return image;}else if (mat.type() == CV_8UC3)                     // 3通道{const uchar *pSrc = (const uchar*)mat.data;     // 复制像素QImage image(pSrc, mat.cols, mat.rows, mat.step, QImage::Format_RGB888);    // R, G, B 对应 0,1,2return image.rgbSwapped();                      // rgbSwapped是为了显示效果色彩好一些。}else if (mat.type() == CV_8UC4)                     // 4通道{const uchar *pSrc = (const uchar*)mat.data;     // 复制像素QImage image(pSrc, mat.cols, mat.rows, mat.step, QImage::Format_ARGB32);        // B,G,R,A 对应 0,1,2,3return image.copy();}else{return QImage();}
}
// QImage转换成cv::Mat
Mat QImage2cvMat(QImage image)
{Mat mat;switch (image.format()){case QImage::Format_ARGB32:case QImage::Format_RGB32:case QImage::Format_ARGB32_Premultiplied:mat = Mat(image.height(), image.width(), CV_8UC4, (void*)image.constBits(), image.bytesPerLine());break;case QImage::Format_RGB888:mat = Mat(image.height(), image.width(), CV_8UC3, (void*)image.constBits(), image.bytesPerLine());cv::cvtColor(mat, mat, CV_BGR2RGB);break;case QImage::Format_Indexed8:mat = Mat(image.height(), image.width(), CV_8UC1, (void*)image.constBits(), image.bytesPerLine());break;}return mat;
}

【QT】QT从零入门教程(十五):QImage和Mat的转换相关推荐

  1. 【QT】QT从零入门教程(十六):QSS样式表

      实现一个软件的基本界面和功能后,接下来要做的就是美化界面,这就用到了QSS样式表.   QSS包含了一个样式规则序列,一个样式规则由一个选择器和声明组成,选择器指定哪些部件由规则影响,声明指定哪些 ...

  2. 【QT】QT从零入门教程(十四):标准颜色对话框类QColorDialog

      Qt中提供了一些标准的对话框,用于实现一些常用的预定义功能,本节要讲的是颜色对话框QColorDialog,它是在标准文件对话框的基础之上添加一些布局实现的. 测试程序: QColor color ...

  3. 【QT】QT从零入门教程(十二):实现工具箱QButtonGroup

      工具箱有两种实现方式,一是运用工具栏QToolBar,二是运用QButtonGroup,在按钮组内创建多个QPushButton,每个按钮对应不同的槽函数.   本节的"工具箱" ...

  4. 【QT】QT从零入门教程(十):QT布局管理QLayout

      介绍完常用控件之后,我们发现,之前控件的大小位置都是通过resize().move()来设置的,很不方便,当你修改某个控件的位置时,其他控件也需要进行调整,容易出现牵一发而动全身的情况.   QT ...

  5. SpringBoot入门教程(十五)集成Druid

    Druid是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB ...

  6. ExtJs 入门教程十五[列模型 :ColumnModel]

    一.效果 二.代码 var fwzcm= new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(),new Ext.grid.CheckboxSelec ...

  7. 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界 摄像机的实现

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 本系列文章由zhm ...

  8. [Python从零到壹] 十五.文本挖掘之数据预处理、Jieba工具和文本聚类万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  9. 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界:摄像机的实现...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhmxy555/article/details/8657656 作者:毛星云(浅墨) ...

最新文章

  1. docker 安装oracle_阿里云使用Docker搭建Hadoop集群
  2. 在Asp.Net中从sqlserver检索(retrieve)图片
  3. shell脚本实现动态时钟
  4. 洛谷——P1019 单词接龙
  5. java仿qq空间音乐播放_完美实现仿QQ空间评论回复特效
  6. python数组元素复制_python的numpy数组 的复制问题?
  7. webshell提权教程linux,Linux下WEBSHELL提权
  8. 在Linux下编写C++程序,使用gcc编译c++出错
  9. 编译Nginx提示gzip module requires the zlib library
  10. js与java对json的操作
  11. 坐标转换工具类:84坐标系,火星坐标系,与百度坐标系之间的互相转换
  12. python视频教程全集免费-Python免费视频教程
  13. mysql中ddl是什么_MySQL中DDL是什么意思
  14. C#实现多人语音聊天
  15. Excel VBA 编程的常用代码
  16. php转调页面,如何转调
  17. SpringBoot+vue实现前后端分离的简历系统
  18. 数据结构之手斯红黑树
  19. vue.js:父组件和子组件
  20. 【毕业设计】65-基于单片机的智能抢答器系统设计(原理图工程+仿真工程+源代码+答辩论文+visio流程图+实物图)

热门文章

  1. 由于找不到appvisvsubsystems32.dll_老实人就别找女朋友了 跟个老实人结婚有多累_新闻资讯...
  2. html让文本框左剧中对齐_HTML 样式 CSS
  3. 数据结构 6-0 图
  4. 【MatConvNet】配置GPU
  5. 数据结构实验 2.连续整数之和(2012年北航研究生入学考试)
  6. [转]邵雍其诗、其人、其事
  7. c/c++教程 - 2.4.2.3~4 拷贝构造函数的调用时机,构造函数调用规则
  8. 小技巧 ----- 计数数组中小于 target 的元素个数
  9. PASCAL-VOC2012 数据集介绍 及 制作同格式数据
  10. nvidia-smi 显示无进程,但GPU显存被占用