如何处理视频信号?视频信号种类很多,RGB,YUV,CVBS,S-VIDEO等等,学电子的,搞视频图像处理的,可能最终会用到上位机处理。我就是这样,呵呵,前段时间做了YUV数据的图像处理,用68013从CMOS sensor采集而来,上位机用GDI做的,费了不少劲,要了解YUV,就要了解RGB,要了解RGB,就要了解bmp图片,内存存放顺序,等等。 bmp图片可以说是最简单的格式了,后缀一般是.bmp或.DIB,关于DIB格式,随便百度下,或找本VC介绍GDI的书看看就明白了,下面以一个例子来说明,估计这样好理解点,印象也深刻。 1 .首先,用Windows自带的画图程序创建一个红绿两色的图片,尺寸大小640×480像素,如下图:
OK,现在我们用UltraEdit打开这幅bmp图片,看到的是这样的16进制数:
2 .我们观察:从地址36H开始到{zh1}有多少个字节,{zh1}是E1035H,E1035-36+1(别说为什么要+1), 好,然后我们看以下,640×480×3等于多少呢?bingo!640×480×3=921600; 为什么呢?呵呵,下面解释(有人问为什么从36H开始的话,等等下面再说!!): 首先我们用画图程序建立的bmp文件是RGB24格式的,我们建立的640×480的图片,意思是这个图片含有640×480个像素(别说不知道什么是像素--!)RGB24格式(也就是RGB888)是指一个像素用RGB表示,有3个字节,R,G,B各占8位共24位,这就为什么叫RGB24或RGB888的原因了; 那么,现在清楚了吧,640×480个像素,一个像素(R/G/B三个分量)占3个字节,那刚好就是921600个字节;所以我们就知道了,从36H开始,一直到{zh1},就是这幅图的图像数据信息 3.然后我们看上面的红绿图片,按照上面说的,{dy}个像素应该是红色,RGB值应该是(255,0,0)。 好,那么我们来看下面的16进制图,从36H开始,36H,37H,38H这3个连续的字节表示{dy}个像素,依次是:00 00 FF,也就是RGB(0,0,255)-这是蓝色的RGB值!!为什么会这样呢? 这是因为一个像素的RGB值在内存中的排列不是RGB,而是BGR这样排列的,所有像素排列是BGRBGRBGRBGR.....,所以00 00 FF表示的RGB值应该是B-00,G-00,R-255,就是(255,0,0)红色的RGB值了,呵呵~ 4. 下面说为什么从36H开始: 首先,我们知道,图片有很多种,bmp啊,jpg啊,gif啊等等,那么36H以后是图像信息,那么图像的格式在哪里保存呢?嘿嘿,就在前面的54个字节中(0-35H,10进制就是54),当然,这54个字节还有其他信息。 对照上面第二个16进制数的图: 0000H-0001H(2字节):42 4D——表示该文件是bmp文件 0002H-0005H(4字节):36 10 0E 00——整个bmp文件的大小(单位字节)。按照内存中数据存放地位在 前,高位在后的原则,这个数是 实际是000E1036,10进制是 921654=640×480 ×3+54(字节)。 0006H-0009H(4字节):00 00 00 00——系统保留,必须设置为0 000AH-000DH(4字节):36 00 00 00——从bmp文件开始到位图数据开始之间的偏移量(字节)。也就是 图像数据前的54个字节,00000036,10进制是54. 000EH-0011H(4字节):28 00 00 00——位图信息头的的长度 0012H-0015H(4字节):80 02 00 00——位图宽度,单位像素。00000280,10进制是640. 0016H-0020H(4字节):E0 01 00 00——位图高度,单位像素。000001E0,10进制是480. 001CH-001DH(2字节):18 00——每个像素的位数。RGB24当然每个像素24位了,16进制的18. 001EH-0021H(4字节):00 00 00 00——0,表示不压缩(BI_RGB)。 0022H-0025H(4字节):00 10 0E 00——用字节数表示的位图数据大小。000E1000就是640×480 0026H-0029H(4字节):00 00 00 00——用像素/米表示的水平分辨率。 002AH-002DH(4字节):00 00 00 00——用像素/米表示的垂直分辨率。 002EH-0031H(4字节):00 00 00 00——位图使用的颜色数 0032H-0035H(4字节):00 00 00 00——指定重要的颜色数,为0表示所有颜色都重要。 以上的54字节意义可以很容易和VC中位图信息头结构体联系起来: 在VC中定义的位图信息头为: typedef struct tagBITMAPINFOHEADER{ // bmih 可以和上面的一一对应,具体每个参数的意义,自行可查阅MSDN。 好了,写到这里,下次写下各种视频数据格式吧,也就从网上东抄西摘了。 【谷】
|