把cv::Mat转化为QImage
来源:互联网 发布:zuk 系统升级软件 编辑:程序博客网 时间:2024/05/21 06:47
前一篇博客《把QImage转换为cv::Mat》介绍了像素在QImage和Mat里面不同的存储方式,以及如何实现从QImage到Mat的转换。了解了存储像素的机理之后,从Mat向QImage的转化也不难。Qimage的构造函数有很多种,其中一种构造函数的使用方法与我们在上一篇《把QImage转换为cv::Mat》Mat的构造方法相似:在构造时,都要告知构造函数,图像的每行有几个字节(bytesPerLine变量),这样就避免了字节错位的问题:
在上一篇博客的示例代码的基础上,我有添加了函数QImage MatToQImage(cv::Mat),实现从cv::Mat到QImage的转换:
QImageMatToQImage(cv::Mat mtx){switch (mtx.type()){case CV_8UC1:{QImage img((const unsigned char *)(mtx.data), mtx.cols, mtx.rows, mtx.cols, QImage::Format_Grayscale8); return img;}break;case CV_8UC3:{QImage img((const unsigned char *)(mtx.data), mtx.cols, mtx.rows, mtx.cols * 3, QImage::Format_RGB888); return img.rgbSwapped();}break;case CV_8UC4:{QImage img((const unsigned char *)(mtx.data), mtx.cols, mtx.rows, mtx.cols * 4, QImage::Format_ARGB32); return img;}break;default:{QImage img;return img;}break;}}
并且在WheelEvent()事件中对函数做了测试。测试了灰度图CV_8UC1和彩图CV_8UC3两种情况,均正常。CV_8UC4的情况下,颜色显示有问题,还在查问题。
#include "mat_qimage.h"#include "cvUtility.h"//#define GRAYconst int iWidth = 250, iHeight = 255;unsigned char * m_pData = new unsigned char[iWidth * iHeight];QImage m_Img;Mat_QImage::Mat_QImage(QWidget *parent): QMainWindow(parent){ui.setupUi(this);#if defined(GRAY)for(int k = 0; k<iWidth;k++){for(int l = 0; l<iHeight; l++){m_pData[l * iWidth + k] = k;}}QImage img(m_pData, iWidth, iHeight, iWidth, QImage::Format_Grayscale8);qDebug()<<img.bytesPerLine();m_Img = QImage(iWidth, iHeight, QImage::Format_Grayscale8);#elseQImage img;img.load(QString("E:\\merge.bmp"));m_Img = QImage(iWidth, iHeight, img.format());#endifQPainter qp;qp.begin(&m_Img);qp.drawImage(m_Img.rect(), img, img.rect());qp.end();}Mat_QImage::~Mat_QImage(){if(m_pData)delete [] m_pData;}void Mat_QImage::paintEvent(QPaintEvent *e){QPainter qp;qp.begin(this);qp.drawImage(rect(), m_Img, m_Img.rect());qp.end();}void Mat_QImage::mouseDoubleClickEvent(QMouseEvent *e){cv::Mat mtx = QImageToMat(m_Img);bool b = cv::imwrite("E:\\mtx.jpg", mtx);qDebug()<<b;}void Mat_QImage::wheelEvent(QWheelEvent *e){#if defined(GRAY)cv::Mat mtx(iHeight, iWidth, CV_8UC1, m_pData);cv::imwrite("E:\\raw_mtx.jpg", mtx);m_Img = MatToQImage(mtx);update();m_Img.save("E:\\qimg.jpg");#elsecv::Mat mtx = cv::imread("E:\\merge.bmp");cv::Mat dst;cv::resize(mtx, dst, cv::Size(iWidth, iHeight));cv::imwrite("E:\\raw_mtx.jpg", dst);m_Img = MatToQImage(dst);update();m_Img.save("E:\\qimg.jpg");#endif}
0 0
- 把cv::Mat转化为QImage
- 把QImage转换为cv::Mat
- QPixmap Qimage cv::mat转化
- OpenCV学习(2)--cv::Mat转化为QImage
- qimage 与cv::mat 转化--> QPixmap
- vtkImageData转化为cv::Mat
- opencv cv::MAT 和 QT QImage 相互转化代码
- QImage 与Mat 转化
- QImage和 Mat 转化
- Mat转换为QImage
- QImage和Mat相互转化
- cv::Mat与QImage间的转换
- cv::mat转换成QImage的问题
- OpenCV的cv::Mat转换为Qt的QImage是歪斜失真
- QImage 与 cv::Mat 之间的相互转换
- QImage 与 cv::Mat 之间的相互转换
- QImage 与 cv::Mat 之间的相互转换
- 【OpenCv】QImage 与 cv::Mat 之间的相互转换
- 如何对网站的文件和资源进行优化
- NYOJ - 找球号(三)
- Atitit 软件项目的一整套解决方案(gui界面,中间,存储数据库,图像处理,全文搜索)attilax总结
- QT结合halcon库编程
- 抽象方法是否可以是静态的,是否可以是native,是否可以是synchronized
- 把cv::Mat转化为QImage
- atitit 数据库mysq启动不起来解决方案.docx
- 如何快速赚钱:Python爬虫
- linux下终端常用命令和vi命令修改文件及保存的使用方法
- 将FFFF:0~FFFF:F 中得字节型数据 复制到0:200 - 0:20F中
- 最大积水面积--宽度优先搜索的应用
- redis内存淘汰 图解
- Android 音频池
- Android音频池(SoundPool)