JPEG2000帧格式详解(一)

写作背景

工作原因,临时需要在内存中解析JPEG2000格式的码流图片,(本来opencv是支持读写jpeg2000格式的图片的,但由于图片是在内存中,无法通过imread函数读取磁盘图片,因此不能使用opencv),由于网上JPEG2000的资料十分少,中间过程也是有点坎坷。为了帮助大家更好的理解JPEG2000图片的码流格式,这里放上自己的笔记。

格式简介

先放上JPEG2000的格式,可以看到图片是由很多的box组成的,每个box代表着一些图片信息,如File Type Box表示文件的类型,Contiguous Codestream Box表示压缩图片内容数据流。下下张图是一个jp2格式的图片的二进制码流形式,接下来是通过这个图片的码流形式进行一个解析,来说明每一个字节所代表的含义。

 
 

1. JPEG2000 Signature box

这个box是表明了该文件的格式是JPEG2000协议的图片格式,该box的类型标识为'j', 'P', ' ', ' '四个字符组成,对应的十六进制为0x6A50 2020,box的内容为0x0D0A 870A,这个box的总长度为12个字节,0x0000 000C 6A50 2020 0D0A 870A。

范围:二进制文件中的0 - 11byte位

                                

2. File Type box

该box类型标识为‘ftyp'(0x6674 7970),内容为'jp2 '(0x6A70 3220),长度位12个字节

范围:二进制文件中的12 - 23byte位,后面的24-148位暂时不明白啥意思,应该也是支持的格式吧,不影响读取,但是试验下面的四个字节还是有用的。

                              

                           

3. JP2 Header box (superbox)

该box包含了图片的很多基本信息,如通道数、颜色空间、分辨率等。
box类型标识为‘jp2h'(0x6A70 3268),该box是一个superbox,意思是该Box是一个复合box,内部包含了若干其他的box。
范围:二进制文件中的149 - 156byte位
 
                            

3.1 Image Header box

该box紧跟JP2 Header box之后,标识位'ihdr'(0x6968 6472),该box包含了图片的基本尺寸信息,如图像大小、通道数等。

box的内容如下表,紧跟'ihdr'之后的是图像的高度HEIGHT占4个字节、宽度WIDTH占4个字节、通道数NC占2个字节、BPC、C、UnkC、IPR分别占一个字节,共14个字节。

范围:二进制文件中的157 - 178byte位

                       

                       

3.2 Colour Specification box

该box标识位'colr'(0x0x636F 6C72)

范围:二进制文件中的179 - 193byte位

                       

3.3 Resolution box (superbox)

该box又是一个superbox,包含了两个子box,标识位'res ' (0x7265 7320)
范围:二进制文件中的194 - 201byte位
                        
 
3.3.1 Capture Resolution box
 
该box标识位'resc' (0x7265 7363)
范围:二进制文件中的202 - 219byte位
 
                     
 
之后的220 - 325byte位都是一些uuid之类的东西,不影响读取
 
3.3.2 Default Display Resolution box
 
该box没有出现
 

3.4 Contiguous Codestream box

该box之后就是压缩的连续数据流了,box类型标识为 'jp2c' (0x6A70 3263),之后就是FF4F开始的数据流部分,这部分内容较多,分下一篇文章讲解。

               

范围:二进制文件中的326 - 333byte位
 

举例2

这个例子更加精简一点,上面那个是用PhotoShop生成的,所以前面的box信息比较多。
 

1. JPEG2000 Signature box(0 - 11)

这个是必须要有的:00 00 00 0C, 6A 50 20 20, 0D 0A 87 0A

2. File Type box(12 - 23)

00 00 00 14, 66 74 79 70, 6A 70 32 20

3. JP2 Header box (superbox)(24 - 31)

00 00 00 2D, 6A 70 32 68

3.1 Image Header box(32 - 53)
00 00 00 16, 69 68 64 72, 00 00 08 00, 00 00 08 00, 00 01, 07, 07, 01, 00
 
其中HEIGHT = 00 00 08 00,WIDTH =  00 00 08 00,通道数 = 00 01,位深度 = 2^(7+1),剩下的保持
 
3.2 Colour Specification box (54 - 68)
00 00 00 0F, 63 6F 6C 72, 01, 00, 00, 00 00 00 11
 

3.4 Contiguous Codestream box(69 - 76)

00 00 00 00, 6A 70 32 63

 
 
 
 
 
 
 
 
 
 
 
 
 
  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值