数据压缩—BMP2YUV

本文详细介绍了BMP文件格式,并通过C++代码展示了如何将BMP图像转换为YUV格式,包括读取BMP文件头、信息头,进行颜色空间转换以及4:2:0下采样的过程。
摘要由CSDN通过智能技术生成

一.BMP文件格式介绍

位图文件格式(BMP)是Windows采用的图像文件存储格式,在Windows环境下运行的所有图像处理软件都支持这种格式。
BMP文本大体上分为四个部分:

1.位图文件头

typedef struct tagBITMAPFILEHEADER {
	WORD bfType;//说明文件的类型
	DWORD bfSize;//说明文件的大小,以字节为单位
	WORD bfReserved1;//保留,设置为0
	WORD bfReserved2;//保留,设置为0
	DWORD bfOffBits;//说明从BITMAPFILEHEADER结构开始到实际的图像数据之间的字节偏移量
}BITMAPFILEHEADER;

 2.位图信息头

typedef struct tagBITMAPINFOHEADER {
	DWORD biSize;//说明结构体所需字节数
	LONG biWidth;//以像素为单位说明图像的宽度,对于32为的机子来说,LONG也是4字节,只是有一位被用来做符号位
	LONG biHeight;//以像素为单位说明图像的高度
	WORD biPlanes;//说明位面数,必须为1
	WORD biBitCount;//说明位数每像素,1,2,4,8,24
	DWORD biCompression;//说明图像是否压缩及压缩类型
	DWORD biSizeImage;//以字节为单位说明图像大小,必须是4的整数倍
	LONG biXPelsPerMeter;//目标设备的水平分辨率,像素每米
	LONG biYPelsPerMeter;//目标设备的垂直分辨率,像素每米
	DWORD biClrUsed;//说明图像实际用到的颜色数,如果为0,则颜色数为2的biBitCount次方
	DWORD biClrImportant;//说明对图像显示有重要影响的颜色索引的数目,如果是0,表示都重要
}BITMAPINFOHEADER;

3.调色板

typedef struct tagRGBQUAD {
	BYTE rgbBlue;//指定蓝色分量
	BYTE rgbGreen;//指定绿色分量
	BYTE rgbRed;//指定红色分量
	BYTE rgbReserved;//保留,指定为0
}RGBQUAD;

RGB图像存储:444格式,按照BGRBGR…方式存储

YUV图像存储:420格式,这种取样格式表示色差信号U和V的取样点数在水平和垂直方向上均为Y的1/2,存储时先存储Y分量,再存储U、V分量

 打开实验BMP文件:

文件头部分:

“42 4D”:说明文件类型为BMP。
“E6 E5 00 00”:(小端存储,0x“0000E5E6”)说明文件大小为58854字节。
“36 00 00 00”: (小端存储,0x“00000036”)说明从结构体开始到实际的图像数据之间偏移量为54字节。

信息头部分:

“28 00 00 00”:(0x"00000028"),说明结构体所需字节数为40字节
“8C 00 00 00”:(0x"0000008C"),说明图像的宽度为140像素
“8C 00 00 00”:(0x"0000008C")&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值