YUV420P图片分离Y/U/V分量并显示验证

背景

最近在学习音视频编解码相关知识,其中涉及到了YUV相关知识.
想要将一个YUV420P格式图片的三个分量分别保存出来并且显示.

参考

YUV格式的讲解:
https://www.bilibili.com/video/BV1pT4y1R7SN?p=4

https://blog.csdn.net/weixin_41157654/article/details/103994570
https://blog.csdn.net/leixiaohua1020/article/details/50466201

生成YUV图片

.\ffmpeg.exe -i input.jpg -s 640x480 -pix_fmt yuv420p output.yuv
注意这里使用了的图片尺寸要和实际图片尺寸一致,
建议先使用640*480尺寸图片跑通整个流程

分别生成Y/U/V分量图片

//描述: 测试YUV分离
void split_yuv420p(char* inputPath, int width, int height) {

	FILE* fp_yuv = fopen(inputPath, "rb+");

	FILE* fp_y = fopen("dog_640x480.y", "wb+");
	FILE* fp_u = fopen("dog_640x480.u", "wb+");
	FILE* fp_v = fopen("dog_640x480.v", "wb+");

	//因为一个y(8)+u/4(2) + v/4(2) = 12bit = 1.5个字节
	unsigned char* data = (unsigned char*)malloc(width * height * 3 / 2);

	//整张图片读进来
	fread(data, 1, width * height * 3 / 2, fp_yuv);

	//Y
	fwrite(data, 1, width * height, fp_y);
	
	//U
	fwrite(data + width * height, 1, width * height / 4, fp_u);
	
	//V
	fwrite(data + width * height * 5 / 4, 1, width * height / 4, fp_v);

	//释放资源
	free(data);

	fclose(fp_yuv);
	fclose(fp_y);
	fclose(fp_u);
	fclose(fp_v);
}

验证Y/U/V图片数据

下载雷神提供的显示软件

https://blog.csdn.net/leixiaohua1020/article/details/50466201

重点:
x 显示图片的时候,要选择像素格式中的Y分量,即使是查看U/V图片的时候也是如此
x 查看Y分量图片的时候,使用的分辨率是640x480
x 查看U/V分量图片的时候,使用的分辨率是320x240

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值