Qt 播放Yuv420p视频

原创 2018年04月15日 16:49:51

环境:

    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.csdn.net/gfocean/article/details/6440844

yuv420转RGB:https://blog.csdn.net/rookie_wei/article/details/32909871

项目流程参考:https://blog.csdn.net/leixiaohua1020/article/details/50466201

项目下载:

https://download.csdn.net/download/st_spring/10350563




Qt播放YUV420P文件

  • 2016年09月28日 17:40
  • 13.05MB
  • 下载

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

原文地址:http://blog.yundiantech.com/?log=blog&id=19 上一节讲解了YUV420P格式的内容。 我说过,我们不是为了做研究。 平白无故讲了YUV420P的...
  • qq214517703
  • qq214517703
  • 2016-09-30 10:20:09
  • 2533

最简单的视音频播放示例6:OpenGL播放YUV420P(通过Texture,使用Shader)

本文记录OpenGL播放视频的技术。上一篇文章中,介绍了一种简单的使用OpenGL显示视频的方式。但是那还不是OpenGL显示视频技术的精髓。和Direct3D一样,OpenGL更好的显示视频的方式也...
  • leixiaohua1020
  • leixiaohua1020
  • 2014-10-28 00:35:40
  • 33790

Qt 视频播放

为了尽快学会使用Qt框架,看了别人的博客之后直接就用了,也懒得去慢慢原理,反正以后接触多了慢慢就懂了。 写一个QtPlayer,能够播放视频流,并且准备在这个视频播放中导入之前所写的处理代码。...
  • hyichao_csdn
  • hyichao_csdn
  • 2015-02-24 17:21:55
  • 3996

QT实现Qwebview播放视频

  • 2017年08月22日 09:02
  • 6KB
  • 下载

Qt+VLC播放多个视频的Demo

这个Demo做的是同时播放9个相同的视频: 详细代码可以参考我写的这篇:Qt+VLC简单的使用显示视频Demo 目前做的这个小Demo代码微微做了一点小优化,单独封装的类:...
  • u014597198
  • u014597198
  • 2017-11-23 14:46:56
  • 161

Qt之显示yuv数据图像

Qt之显示yuv数据图像 本文对在QT中实时显示yuv数据提供一个解决方案,再次特别非常感谢http://blog.yundiantech.com/中的博文,也是借鉴其中的播放YUV文件的demo实...
  • x348722662
  • x348722662
  • 2016-12-03 15:48:20
  • 4955

VS2015+Qt 5.7同一张背景中两个画面循环播放视频

  • 2017年08月30日 20:59
  • 29.07MB
  • 下载

自己写的yuv播放器,支持YUV420P

  • 2016年04月29日 22:25
  • 960KB
  • 下载

qt采用opengl显示yuv视频数据

作者:  使徒保罗 邮箱:  297329588szh@163.com 声明:  欢迎交流学习,如有任何疑问,请通过邮箱联系本人 应用场景:qt opengl渲染yuv420p数据 开发环境:...
  • su_vast
  • su_vast
  • 2016-08-15 20:53:33
  • 5850
收藏助手
不良信息举报
您举报文章:Qt 播放Yuv420p视频
举报原因:
原因补充:

(最多只允许输入30个字)