提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 方法一 最简单
  • 方法二 依赖opencv
  • 方法三,qt5.15版本

前言


在qt框架下,实现相机预览的几种方式在qt相机预览已经描述过了,在该文章的几种方式中,往往需要用到本文的内容,即QVideoFrame与QImage的转换,本文描述下笔者用到的几种方法

方法一 最简单

该方法有点不依赖其他的c++库

static QImage imageFromVideoFrame(const QVideoFrame& buffer)
{QImage img;QVideoFrame frame(buffer);  // make a copy we can call map (non-const) onframe.map(QAbstractVideoBuffer::ReadOnly);QImage::Format imageFormat = QVideoFrame::imageFormatFromPixelFormat(frame.pixelFormat());// BUT the frame.pixelFormat() is QVideoFrame::Format_Jpeg, and this is// mapped to QImage::Format_Invalid by// QVideoFrame::imageFormatFromPixelFormatif (imageFormat != QImage::Format_Invalid) {img = QImage(frame.bits(),frame.width(),frame.height(),// frame.bytesPerLine(),imageFormat);} else {// e.g. JPEGint nbytes = frame.mappedBytes();img = QImage::fromData(frame.bits(), nbytes);}frame.unmap();return img;
}

方法二 依赖opencv

当方法一的方法行不通时,比如某些特殊的图片格式,QImage不支持的情况下可借鉴
依赖opencv库做一些图像格式转换

#include <opencv2/opencv.hpp>
void QImage imageFromVideoFrame(const QVideoFrame &frame)
{QVideoFrame cloneFrame(frame);cloneFrame.map(QAbstractVideoBuffer::ReadOnly);int width = cloneFrame.width();int height = cloneFrame.height();QImage::Format format =  QVideoFrame::imageFormatFromPixelFormat(cloneFrame.pixelFormat());cv::Mat yuvimg(height * 3 / 2, width, CV_8UC1, (unsigned char *)cloneFrame.bits());cv::Mat rgbimg(height, width, CV_8UC3);cv::cvtColor(yuvimg, rgbimg, cv::COLOR_YUV2RGB_NV21);QImage image( rgbimg.data, rgbimg.cols, rgbimg.rows, rgbimg.step, QImage::Format_RGB888 );cloneFrame.unmap();return image;
}

方法三,qt5.15版本

const QVideoFrame &frame;
QImage image = frame.image(); // This function was introduced in Qt 5.15.
QImage::Format ifmt = image.format();
qDebug() << ifmt;
emit frameAvailable(image);

Qt 之 QVideoFrame转换为QImage相关推荐

  1. OpenCV与Qt:IplImage转换为QImage

    2019独角兽企业重金招聘Python工程师标准>>> QImage* MainWindow::IplImageToQImage( IplImage *frame) {QImage ...

  2. twain数据转换为QImage

    如果您想将 Twain 数据转换为 QImage,您可以使用 Qt 的 QImage 类的 fromData 方法. 首先,您需要包含 QImage 头文件: #include <QImage& ...

  3. GDCM:DICOM文件转换为QImage文件的测试程序

    GDCM:DICOM文件转换为QImage文件的测试程序 GDCM:DICOM文件转换为QImage文件的测试程序 GDCM:DICOM文件转换为QImage文件的测试程序 #include &quo ...

  4. 【Qt】AVFrame转QImage

    FFmpeg的AVFrame转成Qt的QImage //头文件 #ifdef __cplusplus extern "C" {#endif #include <libavco ...

  5. QT中Qpixmap与QImage的转化

    QImage image; image.load(":/pics/earth.png");QPixmap pixmap = QPixmap::fromImage(image.sca ...

  6. Qt工作笔记-对QImage的进一步认识(关于α通道)

    一般的点阵图BMP图,是没有α通道的,如下图所示: 而在写OpenGL的程序时候,往往要得到图像的数据位的数据,不用框架,使用FILE很容易就可以获取图像的数据, 如下图: 但用框架将更为方便: 代码 ...

  7. Qt源码分析--QImage(1)

    QImage 类提供独立于硬件的图像表示 (允许直接访问像素数据,且可以用作描绘设备). QImage 是为 I/O 和直接像素访问和操作而设计和优化的. 因为 QImage 是 QPaintDevi ...

  8. [视觉实战案例]Qt下BYTE、QImage、HObject、Mat等图像格式的转换和图像显示方法

    文章目录 一.图像格式间相互转换 1.BYTE转QImage.HObject和Mat 2.QImage.HObject和Mat的相互转换 二.图像显示方法 1.QLabel显示QPixmap图像 2. ...

  9. Qt源码分析--QImage(8)

    1.void setDotsPerMeterX(int); 设置每米有多少个像素 /*!Sets the number of pixels that fit horizontally in a phy ...

最新文章

  1. 2022-2028年中国儿童保健品行业市场研究及前瞻分析报告
  2. mysql导入数据权限_mysql5.7导入数据的权限问题
  3. 疑案追踪:Spring Boot内存泄露排查记
  4. DL之YoloV3:YoloV3论文《YOLOv3: An Incremental Improvement》的翻译与解读
  5. mysql集群重启offline_mysql集群搭建问题及解决方法集锦
  6. EJB分布式对象实现方式描述
  7. HDU-4313-Matrix(离线并查集)
  8. 机器学习算法总结之Boosting:Boosting Tree、GBDT
  9. 输出华氏-摄氏温度转换表(15分)
  10. XidianOJ 1096 数的拆分
  11. Jekyll搭建lanmps.com站点
  12. js时间对象相关函数
  13. Microsoft Office 2016 简体中文Vl批量官方授权版镜像下载
  14. 第二章,用矩阵解线性方程组,01-高斯消元法
  15. 打印图形输出三角形 *
  16. 用Python做一款简单的打字速度测试
  17. 读《犹太人教子枕边书》
  18. 【教育教学资源】教育资讯、教学功能、当老师、或者补习班给学生的资料
  19. adb控制手机屏幕滑动
  20. TF-IDF 算法详解及 Python 实现

热门文章

  1. MDict 平台上的 Merriam-Webster'sCollegiateDictionary 在 EEM 联动下的安装与使用
  2. 云海IOP 3.0:为行业云而生
  3. 难道真的忘记放洗衣粉了??
  4. 1.《小狗钱钱》读书笔记
  5. 人力资源外包有哪些优势和劣性?企业如何适应
  6. JS报错-TypeError: xxx is not a function
  7. VS Visual Studio 魔兽插件开发工具 AddOn Studio for WOW 1 0 含有LUA编辑
  8. Detection论文总结(2)AutoFocus: Efficient Multi-Scale Inference
  9. 股票怎么用python_stock: stock,股票系统。使用python进行开发。
  10. d如何及为什么探测器