Mat与QImage互相转换
前言
Mat是opencv中的存储图像的容器,也是图像像素矩阵
QImage是Qt中存储图片常用的类
Qt和opencv经常配合在一起使用,但Qt的函数方法的参数是不接受Mat的,所以如果我们想要在Qt中操作opencv处理后的图像,就必须将Mat转换成QImage
Mat->QImage
Mat转换成QImage,可直接使用QImage的构造函数进行转换,但要注意的是,当Mat类型是CV_8UC3时,因为opencv色彩空间是BGR,Qt默认是RGB,所以需要转换,可以使用opencv中的cvtColor函数或者Qt中的rgbSwapped来进行转换,注意在QImage的生存周期内,必须保证Mat中的数据不会被释放,否则QImage就会失效
解决方法:调用QImage::bits函数复制一份Mat数据,这样Mat释放,QImage也能正常使用
QImage MainWindow::MatToImage(Mat &m) //Mat转QImage
{//判断m的类型,可能是CV_8UC1 CV_8UC2 CV_8UC3 CV_8UC4switch(m.type()){ //QIamge 构造函数, ((const uchar *data, 宽(列),高(行), 一行共多少个(字节)通道,宽度*字节数,宏参数)case CV_8UC1:{QImage img((uchar *)m.data,m.cols,m.rows,m.cols * 1,QImage::Format_Grayscale8);return img;}break;case CV_8UC3: //一个像素点由三个字节组成{//cvtColor(m,m,COLOR_BGR2RGB); BGR转RGBQImage img((uchar *)m.data,m.cols,m.rows,m.cols * 3,QImage::Format_RGB888);return img.rgbSwapped(); //opencv是BGR Qt默认是RGB 所以RGB顺序转换}break;case CV_8UC4:{QImage img((uchar *)m.data,m.cols,m.rows,m.cols * 4,QImage::Format_RGBA8888);return img;}break;default:{QImage img; //如果遇到一个图片均不属于这三种,返回一个空的图片return img;}}
}
QImage->Mat
QImage转换Mat,可直接使用Mat的构造函数进行转换,通过QImage提供的format函数判断图片类型,分别case不同情况,注意,图片类型远不止这些,这里只是列举常见的灰度图和彩色图类型
Mat MainWindow::ImageToMat(QImage &image) //QImage转Mat
{Mat mat = Mat::zeros(image.height(), image.width(),image.format()); //初始化Matswitch(image.format()) //判断image的类型{case QImage::QImage::Format_Grayscale8: //灰度图mat = Mat(image.height(), image.width(),CV_8UC1,(void*)image.constBits(),image.bytesPerLine());break;case QImage::Format_RGB888: //3通道彩色mat = Mat(image.height(), image.width(),CV_8UC3,(void*)image.constBits(),image.bytesPerLine());break;case QImage::Format_ARGB32: //4通道彩色mat = Mat(image.height(), image.width(),CV_8UC4,(void*)image.constBits(),image.bytesPerLine());break;default:return mat;}return mat;
}
这篇文章对你有帮助的话就点个赞吧~
点赞收藏关注就是对我最大的支持~
Mat与QImage互相转换相关推荐
- opencv常用函数,QT中Mat与QImage的转换
一.opencv简介 opencv是一个跨平台计算机视觉和机器学习软件库,可以运行在Linux.Windows.Android和Mac OS操作系统上,实现了图像处理和计算机视觉方面的很多通用算法. ...
- opencv将图像处理之后显示在label上(Mat转化为qimage)转换之后label显示全黑
opencv将图像处理之后显示在label上(Mat转化为qimage)转换之后label显示全黑 1.本实验要完成的功能:利用opencv将原图像灰度处理,然后显示在label上 2.图像处理程序: ...
- [视觉实战案例]Qt下BYTE、QImage、HObject、Mat等图像格式的转换和图像显示方法
文章目录 一.图像格式间相互转换 1.BYTE转QImage.HObject和Mat 2.QImage.HObject和Mat的相互转换 二.图像显示方法 1.QLabel显示QPixmap图像 2. ...
- QImage转Mat(Mat 转QImage)工具类
@[TOC](QImage转Mat(Mat 转QImage)工具类) 注意QImage转Mat 需要mat.clone() matcvImage.h #ifndef MATCVTIMAGE_H #de ...
- Java中BufferImage与Mat格式的互相转换
初学OpenCV,在项目中需要对图像进行插值放大处理,然后再做一系列操作,但是OpenCV中插值放大处理的输入和输出都是Mat矩阵格式的数组,而项目需要BufferImage类型的图像数据,OpenC ...
- CNN推理时opencv图像Mat数组从HWC转换到CHW方法
在嵌入式端进行CNN推理时,opencv中Mat数组数据组织格式为HWC,输入到推理框架中,需要转换为CHW格式,可以使用opencv中dnn模块的cv::dnn::blobFromImages或cv ...
- mat 转 Qimage
QImage FitnessMainDlg::MatImageToQt(const cv::Mat &src) {//CV_8UC1 8位无符号的单通道---灰度图片if (src.type( ...
- opencv颜色识别学习总结
将OpenCV 用于识别彩色LED颜色 将OpenCV 用于识别彩色LED颜色时,可以通过分色计算各通道非饱和像素的HSV值,能可靠识别各LED的颜色. 使用python编程,识别一个1024*480 ...
- image转pixmap qt_Qt 编程指南10 QImage Mat QPixmap转换
//示例 pushButtonOpenPicBig按钮clicked单击动作触发 void Qt_Window::on_pushButtonOpenPicBig_clicked() { string ...
最新文章
- 从零到熟练编写LaTex数学公式,这两篇就够了
- 编译安装openresty+mariadb+php7
- Enterprise Library 5.0发布
- It Smells!不要让两个状态纠缠的类同时成为某个事件的观察者(一切都只是视图)...
- nodejs返回下载文档,文档名称出现汉字出现乱码解决
- Hibernate sqlserver 的对象转成 Hibernate mysql 的对象时 需注意
- windows下安装phpcms html/ 文件夹不可写的一种错误以及解决方法
- design短语的用法总结_中考英语常考的重点句型及短语汇总,考前必备
- 【路径规划】基于matalb遗传算法机器人栅格地图路径规划【含Matlab源码 175期】
- linux shell捕获异常,shell脚本中如何获取错误输出
- 做Java软件开发有前途吗?
- 楚留香服务器维护时间,【9月28日维护公告】
- Multisim 电路辅助设计思维导图
- 瞬态抑制二极管型号参数对照表,想要的都在这里
- linux磁盘配额分区,Linux磁盘配额
- 从模型制作(3dmax)到网页显示(babylonjs)全过程介绍
- android sdk 配置出错error: unknown argument --licenses
- CAD高版本窗体阵列LISP_CAD高版本窗体阵列LISP_AutoCAD高版本怎么把阵列对话框调出来?...
- emoji表情无法显示在html,微信分享页面Andriod手机emoji表情符无法显示问题?
- 在visio中不借助公式编辑器在字母上方打波浪线
热门文章
- 史记翻译-汉初三杰-萧何-萧相国世家第二十三
- React+SpringBoot通过WebSocket实时统计在线人数
- 实现Log4j和Logback的统一日志封装与动态日志级别调整
- opencv学习18——浮雕效果
- Cisco Packet Tracer 思科模拟器利用NAT实现外网主机访问内网服务器
- UI设计中分享功能总结
- mockmvc技术分享
- 复制一个虚拟化的自己:数字孪生将如何影响我们的生活?
- java object.getclass_Java Object类,getClass()方法介绍
- android 弹出框崩溃_Android处理崩溃的一些实践