QImage与cv::Mat转换;
QImage主要格式有QImage::Format_RGB32, QImage::Format_RGB888, QImage::Format_Index8, 不同的格式有不同的排布:
格式部分可以参考: https://blog.csdn.net/aizhaoyu/article/details/12611611
QImage::Format_RGB32,存入格式为B,G,R,A 对应 0,1,2,3
QImage::Format_RGB888,存入格式为R, G, B 对应 0,1,2
QImage::Format_Indexed8,需要设定颜色表,QVector<QRgb>
opencv的Mat类默认是按照B,G,R进行排布的,因而,在QImage转换为 opencv的Mat时,根据不同的格式类型要进行R,B互换;
QImage ------> cv::Mat
- /**
- * @brief Image ----- > mat
- * @param image
- * @return
- */
- void ImgCvt::QImage2cvMat(QImage& image, cv::Mat **pImg)
- {
- qDebug() << image.format();
- switch(image.format())
- {
- case QImage::Format_ARGB32:
- case QImage::Format_RGB32:
- case QImage::Format_ARGB32_Premultiplied:
- *pImg =new cv::Mat(image.height(), image.width(), CV_8UC4, (void*)image.constBits(), image.bytesPerLine());
- break;
- case QImage::Format_RGB888:
- {
- *pImg = new cv::Mat(image.height(), image.width(), CV_8UC3, (void*)image.constBits(), image.bytesPerLine());
- cv::cvtColor(**pImg, **pImg, CV_BGR2RGB); //QImage Format_RGB888是按照R,G,B排布, Mat按照B,G,R排布, 因而,需要进行互换;
- break;
- }
- case QImage::Format_Indexed8:
- *pImg = new cv::Mat(image.height(), image.width(), CV_8UC1, (void*)image.constBits(), image.bytesPerLine());
- break;
- }
- }
cv::Mat ---> QImage
- QImage ImgCvt::cvmatToQImage(cv::Mat mat)
- {
- switch ( mat.type() )
- {
- // 8位4通道
- case CV_8UC4:
- {
- QImage image( mat.data, mat.cols, mat.rows, mat.step, QImage::Format_RGB32 );
- return image;
- }
- // 8位3通道
- case CV_8UC3:
- {
- QImage image( mat.data, mat.cols, mat.rows, mat.step, QImage::Format_RGB888 );
- return image.rgbSwapped();
- }
- // 8位单通道
- case CV_8UC1:
- {
- static QVector<QRgb> sColorTable;
- // only create our color table once
- if ( sColorTable.isEmpty() )
- {
- for ( int i = ; i < ; ++i )
- sColorTable.push_back( qRgb( i, i, i ) );
- }
- QImage image( mat.data, mat.cols, mat.rows, mat.step, QImage::Format_Indexed8 );
- image.setColorTable( sColorTable );
- return image;
- }
- default:
- qDebug("Image format is not supported: depth=%d and %d channels\n", mat.depth(), mat.channels());
- break;
- }
- return QImage();
- }
注: 该博客为扩展型;
QImage与cv::Mat转换;的更多相关文章
- QImage 与 cv::Mat 之间的相互转换
近期做图像处理方面的项目比較多,非常多算法自己从头写的话太浪费时间,并且自己写的也不一定完好,早就听说OpenCV在图像处理算法方面功能非常强大,一直没时间学习,这次正好项目用到了.暂时抱佛脚学习些O ...
- Qt QImage与OpenCV Mat转换
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51029382 应一个朋友的要求,整理总 ...
- cv::mat转换成QImage的问题
在进行cv::mat转换为QImage过程中,经常出现问题: cv::Mat image; ...QImage img=QImage((const unsigned char*)(image.data ...
- cv::Mat转换QImage
cvtColor(img, img, CV_BGR2RGB); QImage image((uchar*)img.data,img.cols,img.rows,QImage::Format_RGB88 ...
- CvArr* to cv::Mat 转换
OpenCV中的CvArr*的定义的一个空类型的指针,可以转换为其派生类CvMat和IplImage,那么如何将其转化为cv::Mat呢,其实很简单,只需要一行代码即可: // CvArr *_img ...
- Convert between cv::Mat and QImage 两种图片类转换
在使用Qt和OpenCV混合编程时,我们有时需要在两种图片类cv::Mat和QImage之间进行转换,下面的代码参考了网上这个帖子: //##### cv::Mat ---> QImage ## ...
- OpenCV图片类cv::Mat和QImage之间进行转换(好多相关文章)
在使用Qt和OpenCV混合编程时,我们有时需要在两种图片类cv::Mat和QImage之间进行转换,下面的代码参考了网上这个帖子: //##### cv::Mat ---> QImage ## ...
- 【资料收集】Converting Between cv::Mat and QImage or QPixmap
参考: 方法一 Convert between cv::Mat and QImage 两种图片类转换 - Grandyang - 博客园 http://www.cnblogs.com/grandyan ...
- cv::Mat到YUV420的转换《转》
某些特定场合我们会经常遇到yuv420格式的视频文件,这种视频帧无法直接用于opencv,故而,需要进行格式转换:幸运的是,opencv提供了rgb到yuv420的格式转换函数:下面给出基本用法: 函 ...
随机推荐
- How to split DMG on macOS
hdiutil segment /users/test/test1.dmg -segmentsize 4000m -o /users/test/test2.dmg
- Nginx Epoll事件模型优劣
L30-31 Epoll 性能优势主要源于它不用遍历 假设有100万个链接 其它事件可能都需要遍历所有链接,而Epoll只要遍历活跃的链接,这样大大提升了效率
- python基础数据类型--list列表
列表: 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: li = [‘alex ...
- Spring 使用介绍(七)—— Spring事务
一.数据库事务概述 1.基本介绍 事务必需满足ACID(原子性.一致性.隔离性和持久性)特性,缺一不可: 原子性(Atomicity):即事务是不可分割的最小工作单元,事务内的操作要么全做,要么全不做 ...
- 使用Guava获取某一个类的指定超类上的泛型Type T
package com.geostar.gfstack.operationcenter.log.common.hibernate; import com.geostar.gfstack.operati ...
- BZOJ4653 [NOI2016] 区间 【线段树】
题目分析: 首先思考一个二分答案的做法.我们可以注意到答案具有单调性,所以可以二分答案. 假设当前二分的答案是$ k $.那么按照大小顺序插入每个区间,同时在末端删除会对答案产生影响的区间.这里不妨用 ...
- 使用ROME解析rss,如何获取icon图标
问题 网站使用SpringMVC框架,实现了RSS订阅,但是在阅读器里面,只有网站的标题,没有网站的图标. 分析 ROME会从<channel>标签下指定的<link>地址中, ...
- Hdoj 1789 Doing Homework again 题解
Problem Description Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of h ...
- Android 性能优化提示
原文 http://developer.android.com/guide/practices/design/performance.html 性能优化 Android应用程序运行的移动设备受限于其运 ...
- 【WC2018】州区划分(FWT,动态规划)
[WC2018]州区划分(FWT,动态规划) 题面 UOJ 洛谷 题解 首先有一个暴力做法(就有\(50\)分了) 先\(O(2^nn^2)\)预处理出每个子集是否合法,然后设\(f[S]\)表示当前 ...