Qt 播放Yuv420p视频

FFmpeg解码原理图解:从YUV到RGB的像素转换在Qt播放器中是如何实现的? 本文详细解析了FFmpeg解码原理,重点介绍了从YUV到RGB的像素转换在Qt播放器中的实现过程。通过图解和代码示例,深入探讨了`sws_scale()`函数的工作原理及Qt框架的`QImage`渲染机制,帮助开发者优化视频播放器的性能和画质。 阅读详情

环境:

    vs2015;Qt5.8;opencv3.4;

从文件读取一帧的数据后从yuv转到rgb,用rgb构造一个IplImage,再把IplImage 转成QImage,显示。

yuv420转rgb:

void YUV420_2_RGB(unsigned char* pYUV, unsigned char* pRGB, int width, int height)
{
	//找到Y、U、V在内存中的首地址  
	unsigned char* pY = pYUV;
	unsigned char* pU = pYUV + height*width;
	unsigned char* pV = pU + (height*width / 4);


	unsigned char* pBGR = NULL;
	unsigned char R = 0;
	unsigned char G = 0;
	unsigned char B = 0;
	unsigned char Y = 0;
	unsigned char U = 0;
	unsigned char V = 0;
	double temp = 0;
	for (int i = 0; i < height; i++)
	{
		for (int j = 0; j < width; j++)
		{
			//找到相应的RGB首地址  
			pBGR = pRGB + i*width * 3 + j * 3;

			//取Y、U、V的数据值  
			Y = *(pY + i*width + j);
			U = *pU;
			V = *pV;

			//yuv转rgb公式  
			//yuv转rgb公式  
			temp = Y + ((1.773) * (U - 128));
			B = temp<0 ? 0 : (temp>255 ? 255 : (unsigned char)temp);

			temp = (Y - (0.344) * (U - 128) - (0.714) * (V - 128));
			G = temp<0 ? 0 : (temp>255 ? 255 : (unsigned char)temp);

			temp = (Y + (1.403)*(V - 128));
			R = temp<0 ? 0 : (temp>255 ? 255 : (unsigned char)temp);

			//将转化后的rgb保存在rgb内存中,注意放入的顺序b是最低位  
			*pBGR = B;
			*(pBGR + 1) = G;
			*(pBGR + 2) = R;


			if (j % 2 != 0)
			{
				*pU++;
				*pV++;
			}

		}
		if (i % 2 == 0)
		{
			pU = pU - width / 2;
			pV = pV - width / 2;
		}
	}
}
IplImage 转成QImage:

QImage *IplImageToQImage(const IplImage *img)  
{  
    QImage *image;  
    cvCvtColor(img,img,CV_BGR2RGB);  
    uchar *imgData=(uchar *)img->imageData;  
    image=new QImage(imgData,img->width,img->height,QImage::Format_RGB888);  
    return image;  
}  

参考:

IplImage转QImage: https://blog.youkuaiyun.com/gfocean/article/details/6440844

yuv420转RGB:https://blog.youkuaiyun.com/rookie_wei/article/details/32909871

项目流程参考:https://blog.youkuaiyun.com/leixiaohua1020/article/details/50466201

项目下载:

https://download.youkuaiyun.com/download/st_spring/10350563




QFFPlay播放器__QOpenglWidget显示YUV 本文介绍了使用QT的QOpenGLWidget显示YUV420P视频的实现方法。主要步骤包括:1. 初始化GLEW库管理OpenGL函数指针;2. 设置顶点数组对象(VAO)定义绘制区域;3. 创建纹理并选择线性过滤方式;4. 编写顶点和片段着色器程序,其中片段着色器实现了YUV到RGB的转换;5. 编译、链接并验证着色器程序;6. 在paintGL函数中完成纹理绑定、数据传递和绘制操作。该方法通过OpenGL的着色器程序高效实现了YUV视频的渲染显示,可作为视频播放器开发的基础模块。 阅读详情

相关推荐

OpenGL —— 基于Qt的视频播放器 - ffmpeg硬解码,QOpenGL渲染yuv420p或nv12视频(附源码)

OpenGL —— 基于Qt的视频播放器 - ffmpeg硬解码,QOpenGL渲染yuv420p或nv12视频(附源码)

486

如何旋转YUV图片数据且使用Qt显示

旋转YUV420 各种格式的数据图片总结。

保持一颗敬畏之心,简单地调用C++,适当地向C++妥协,让以后的自己看懂代码,让别人看懂代码。 3202

YUV420在qt5下显示

yuv420在qt5下的使用opengl显示方法,在ubuntu16下测试通过。

Qt之显示yuv数据图像

【转载】http://blog.youkuaiyun.com/x348722662/article/details/53445136 目录(?)[+] Qt之显示yuv数据图像 qt中利用mmfpeg将yuv转RGB32qt中将RGB32显示到label上 Qt之显示yuv数据图像 本文对在QT中实时显示yuv数据提供一个解决方案,再次特别非常感谢ht

ASKLW的博客 6364

QT使用OpenGL显示YUV420和YUV444数据实例,内附用例,可直接运行

使用QT中的OpenGL播放YUV420和YUV444数据,包内自带测试用例和YUV测试数据,可以直接运行。

从零开始学习音视频编程技术(十五) YUV420P转RGB32

从零开始学习音视频编程技术(十五) YUV420P转RGB32 这是Qt的工程,建议使用Qt Creator 打开 Qt的版本是4.8.4,当然是用Qt5也是没有影响的,不过编译器记得使用Mingw。 FFMPEG的版本是2.5.2 记得将ffmpeg/bin目录下的dll文件拷贝到编译生成的exe所在的目录下,否则会无法运行。 关于代码的解释 请参考: http://blog.yundiantech.com/?log=blog&id=19

Qt加载本地图片转为YUV420P格式数据

在流媒体应用中,视频编码是必不可少的一环。视频编码的作用是将高带宽、高码率的原始视频流压缩成低带宽、低码率的码流,以便于传输和存储。H264是一种高效的视频编码标准,具有良好的压缩性能和广泛的应用范围,在实时流媒体应用中得到了广泛的应用。

1316

字符叠加及YUV420转RGB

在YUV420格式上实现字符叠程序加及YUV420转RGB程序,已实现

Qt播放YUV420P文件:开源项目推荐

Qt播放YUV420P文件:开源项目推荐 去发现同类优质开源项目:https://gitcode.com/ 在众多开源项目中,Qt播放YUV420P文件以其独特的技术特色和应用场景,吸引了广大开发者的关注。本文将为您详细介绍这个项目,帮助您了解其核心功能、技术分析、应用场景和特点。 项目介绍 Qt播放YUV420P文件是一个Qt工程,旨在播放YUV420P格式的视频文件。该工程从零开始,深入讲解了...

gitblog_06770的博客 652

Qt播放yuv420

读取yuv420文件,转换成rgb数据后,使用opencv转Qimage,;进行播放

yuv420转rgb

yuv420转rgb

Qt播放YUV420P文件

Qt播放YUV420P文件 去发现同类优质开源项目:https://gitcode.com/ 本仓库提供了一个Qt工程,用于播放YUV420P格式的视频文件。该工程从零开始,介绍了音视频编程技术中YUV420P转RGB32的过程,并在转换基础上加入了Qt显示界面。通过本工程,用户可以实现对YUV420P文件的播放。 使用说明 建议使用Qt Creator打开该工程。 -.Qt版本建议使用4.8....

gitblog_06771的博客 278

MATLAB实战:手把手教你搭建构网逆变器同步稳定性仿真模型(附避坑指南)

本文详细介绍了如何在MATLAB/Simulink平台上搭建构网逆变器同步稳定性仿真模型,涵盖从基础模块配置到虚拟同步机控制实现的完整流程。针对电力电子工程师常见的控制参数整定困难、仿真结果偏差等问题,提供了LCL滤波器谐振抑制、虚拟惯量优化等关键技术解决方案,并附有避坑指南和工程实践技巧,助力研究者高效完成仿真建模。

weixin_29051193的博客 297

Qt使用SDL2D3D渲染YUV420p:高效视频渲染解决方案

Qt使用SDL2D3D渲染YUV420p:高效视频渲染解决方案 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代软件开发中,视频渲染是多媒体处理的重要环节。Qt使用SDL2D3D渲染YUV420p项目,正是针对这一需求而诞生的开源项目。它为开发者提供了一个在Qt环境下,利用SDL2或D3D技术渲染YUV420p格式视频的示例程序。这一项目的核心功能在于,将视频数据...

gitblog_06761的博客 383

工业相机与ABB机器人Socket通信实战:手把手教你用RobotStudio 6.08搭建视觉引导工作站

本文详细介绍了工业相机与ABB机器人通过Socket通信实现视觉引导工作站的实战教程。使用RobotStudio 6.08平台,涵盖工作站搭建、坐标系标定、RAPID代码开发及TCP/IP通信配置,特别解析了欧拉角与四元数转换等关键技术难点,助力智能制造产线升级。

weixin_42531516的博客 408

实战指南:CentOS 7下VOS3000 8.0从零部署到授权激活全流程

本文提供了一份详尽的CentOS 7系统下部署VOS3000 8.0的实战指南。从环境准备、使用FileZilla上传安装包、执行自动化安装脚本,到获取软件码、利用注册机生成授权文件并激活,手把手带领用户完成从零部署到投入商用的全流程,确保系统稳定运行。

zero1的博客 895

Qt +FFmpeg+SDL视频播放器

调用ffmpeg库对本地视频文件进行视频流解码,解码后的数据格式为yuv420p,调用sdl库,并传入Qt显示控件句柄给sdl进行渲染显示,代码如下: #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QLabel> #include <QDebug> namespace Ui { ...

aqiasi007的博客 1899

ICC 实战解析——CTS 时钟树综合中的关键设置与优化策略

本文深入解析ICC工具中CTS时钟树综合的关键设置与优化策略,涵盖时钟树异常引脚设置、目标参数配置、非默认布线规则(NDR)等核心技术。通过实战案例展示如何有效控制时钟偏差、优化信号完整性,并平衡功耗与面积,为芯片物理设计提供专业指导。

weixin_30872577的博客 325

Qt tips 之使用 FFmpeg + OpenGL 实现简易视频播放器

Qt + FFmpeg + OpenGL 实现简易视频播放器

qq_41368848的博客 1527

仪表数字图像识别的传统方法

虽然现有很多机器学习算法能够准确地识别数字,但是传统方法对于一些需要离线识别且计算能力有限的下位机设备来说,仍然有非常不错的效果。因此,今天就向大家讲解一下传统的数字识别方法在仪表读数方面的应用。 1.图像预处理技术 1.1 主要流程 图像处理依次需要进行图片预处理、字轮区域定位、字符分割和字符识别等过程。其中图像处理流程如下图所示。 2. 详细过程 2.1 灰度化 为了减小图像原始数据量,本系...

XYZ 4523

OceanBase数据库:从入门到精通全栈教程目录(含架构解析、性能调优与实战案例)

《OceanBase数据库专栏》全面解析蚂蚁集团自主研发的分布式关系型数据库,涵盖从基础到高级的完整知识体系。专栏分为入门篇、原理篇、使用篇等七大模块,包含35+篇深度文章,详细讲解OceanBase的高可用架构、Paxos协议、LSM树存储引擎等核心技术。特别提供MySQL/Oracle迁移指南、金融/电商场景实践案例,以及性能调优、运维监控等实战内容。适合开发者、DBA及架构师快速掌握OceanBase的核心特性和行业应用,助力企业实现数据库分布式转型。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 981

XPlay2.0 播放器项目实战-05

1 类图分析 单一职责:每个类做独立的事情,解码与解封装分开; 开闭原则:对扩展开发,对修改封闭; 替换原则:一个类的派生类应该可以直接替换基类,派生类应该不会更改父类实现的方法,不要破坏父类的功能; 接口隔离:不强迫用户用不需要的方法; 依赖倒置:尽量依靠抽象接口编程而不是具体实现类; 分割的模块: XDemux 解封装 XDecode 解码 XResample 重采样 XAudioPlay 音频播放 VideoWidget 视频图像播放 XSlider 滑动条 2 QT

LIJIWEI0611的博客 1372

SAP Event Mesh 简介

Get Started with Messaging for Decoupled Communication Step 1: What is the SAP Event Mesh service? SAP Event Mesh 是一种完全托管的服务,用于连接应用程序、服务和系统,以便它们可以通过消息和事件相互交互。 它通过引入中央消息代理取代了传统的点对点通信。 虽然点对点通信适用于在有限数量的发送方和接收方之间共享数据,但可扩展性很快就会成为一个问题。 SAP Event Mesh 解决了这个问题,并确保

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1243

嵌入式Qt使用ffmpeg视频开发记录

解码后的YUV通道数据分别保存在avframe->data[0]、avframe->data[1]、avframe->data[2],仅通过avframe->data[0]取数据,大概率可以取到不完整的UV数据,表现为视频颜色有残影,因为这几段数据内存不连续。可以帮我们完成分帧,不足一帧的数据也会继续留在上下文中,不用担心,大可从文件中不断读取固定长度的数据送入parser,获取到完整的packet后就可以向解码器中传入packet数据。在此记录一下Qt下视频应用开发的自学历程,可供初学者参考和避雷。

momomomo90的博客 658

DeiT详解:知识蒸馏的Transformer

DeiT模型(8600万参数)仅用一台 GPU 服务器在 53 hours train,20 hours finetune,仅使用 ImageNet 就达到了 84.2 top-1 准确性,而无需使用任何外部数据进行训练,性能与最先进的卷积神经网络(CNN)可以抗衡。其核心是提出了针对 ViT 的教师-学生蒸馏训练策略,并提出了方法,使得在视觉领域训练得又快又好。

走在深度学习前沿的小宋 2636

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

下一篇: window 安装pycocotools遇到的问题
st_spring
博客等级 码龄10年 9粉丝 30原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值