BMP文件转YUV文件_C语言实现

一、最终实现的效果

BMP图像序列(本次实验共195张BMP图片)如下:


上述BMP图片经过程序转换后,生成YUV图像如下:


上述YUV文件经过YUVPlayer播放后,效果如下:

 

对于不同位数的图像测试如下:

24位BMP生成的YUV:


8位BMP(因为位深是通过“画图”软件对上一幅图像的基础上直接设置的,所以会8位BMP会出现出现明显的失真。ps:“画图”保存好像无法保存成16位,我也没有装ps,请大家自行测试)


4位BMP生成的YUV:


 

二、BMP2YUV实现思路分析

思路方面理解起来很简单,理清BMP文件数据中的四层结构,分别是位图文件头、位图信息头、调色板、实际的位图数据。从位图信息头中提取图像宽高、实际的位图数据所在数据,然后从BMP中读取实际的位图数据,进而索引调色板数组得到每一数据的实际物理意义,即查找得到各位图数据代表了什么颜色(顺序是BGR),进而采用下列转化公式,将RGB转化为YUV。

 

Y=0.30R+0.59G+0.11B U=0.493(BY) V=0.877(RY)

 

理解程序的关键是理清BMP文件的自包含结构,学会通过位运算提取相应数据,进行文件的读写操作。

但实际上,程序中有很多细节需要注意,本文最后会给出总结。


三、位图图像BMP介绍

位图图像(全称:bitmap), 亦称为点阵图像,区别于矢量图放大不失真的特征,位图图像是由单个像素点组成,放大后会失真。它是 Windows操作系统中的标准系统中的标准图像,是Windows环境中交换与图有关的数据的一种标准。BMP文件属于自包含文件,包含表格中四个部分。BMP 文件的图像深度可选 lbit、4bit、8bit、16bit及24bit 。

典型的BMP图像由四部分组成:

位图文件头BITMAPFILEHEADER

位图信息头BITMAPINFOHEADER

调色板Palette

实际的位图数据ImageData

ÿ

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值