文档章节

Jpeg解码小结(一)

t
 tigerBin
发布于 2017/07/06 10:11
字数 568
阅读 23
收藏 0
点赞 0
评论 0

Source:https://github.com/lzb-cc/JpegCodecs

数据结构:

	class Matrix
	{
	public:
		Matrix(){}
		void Create(int _rows, int _cols, int _channal) // 供外部调用的接口
		{
		    rows = _rows;
		    cols = _cols;
		    channal = _channal;
		    data = new uint8_t[_rows * _cols * _channal];
		}

		int rows;      // 图像高度
		int cols;      // 图像宽度
		int channal;   // 通道数(固定为 3, 即RGB颜色)
		uint8_t *data; // 图像数据
	};

 Matrix用于保存图像基本信息,包含图像的数据,图像的高度与宽度

解码时作为参数输入到JpegDecoder

 

JpegDecoder在构建一个对象时需要把文件路径作为参数输入,在构造函数中打开并读取文件数据到缓冲区stream 中,读取完毕后关闭文件

stream Jpg文件数据缓冲区
endOfDecoder 如果从 stream 中读取到的数据是 0xFFD9 ,表示需要解码的数据已经全部解码完成,此时解码工作全部完成
curIndex 用于指示当前从 stream 中读取的数据的位置
readCount 用于指示当前从 stream 中读取的一个字节已经有多少位 被解码了
quantY 从stream中读取Y分量的量化表
quantCbCr CbCr共用一张量化表
m_width 从stream读取图像的宽度信息
m_height 从stream读取图像的高度信息
yBlk 用于暂存从数据流中解码的四个Y分量数据块
cbBlk 用于暂存从数据流中解码的一个Cb分量数据块
crBlk 用于暂存从数据流中解码的一个Cr分量数据块
yBuf 16 x 16 的数据块(四个yBlk)
cbBuf 16 x 16 的数据块(由cbBlk反采样后形成)
crBuf 16 x 16 的数据块(由crBlk反采样后形成)
yDC,cbDC,crDC DC采用差分编码
DC,AC 四张哈夫曼表,用于解码用,从 DHT_Segment中读取,或从stream中读取

 

	class JpegDecoder
	{
	public:
		JpegDecoder(const char *fileName);
		~JpegDecoder();

		void Decoder(Matrix &mat);
	protected:
        // ......

	private:
		uint8_t       *stream;      //Jpeg文件数据流

		bool           endOfDecoder; // 数据流结束标记
		int	       curIndex;     // 解码到当前数据位
		uint8_t        readCount;    // 已经解码的当前字节的位数

		uint8_t        quantY[64];       // Y 分量量化表
		uint8_t        quantCbCr[64];    // CbCr 分量量化表

		int            m_width;          // 图像宽度
		int            m_height;         // 图像高度

		int            yBlk[4][64];
		int            cbBlk[64];
		int            crBlk[64];

		int            yBuf[256], cbBuf[256], crBuf[256];

		int            yDC, cbDC, crDC;

		/* huffman table */
		tinyStl::tinyMap DC[2], AC[2];
	};

 

© 著作权归作者所有

共有 人打赏支持
t
粉丝 0
博文 62
码字总数 17049
作品 0
武汉
程序员
几种图片格式的简介

JPEG 是目前最常见的图片格式,它诞生于 1992 年,是一个很古老的格式。它只支持有损压缩,其压缩算法可以精确控制压缩比,以图像质量换得存储空间。由于它太过常见,以至于许多移动设备的 ...

南瓜宝宝
2016/05/30
43
0
NIOS2随笔——JPEG解码与VGA显示

1. 系统概述 本设计采用NIOS2 32位处理器,通过SPI接口将SD/TF卡中的JPEG图片数据读取到内存中,SD/TF卡的文件系统为FAT32,NIOS2软件实现JPEG解码后,启动framereader和Clocked Video Outpu...

shugenyin
2017/01/08
0
0
英伟达开源数据增强和数据解码库,解决计算机视觉性能瓶颈

     新智元编译   来源:NVIDIA   编辑:肖琴   【新智元导读】在CVPR 2018大会上,英伟达开源了数据增强库DALI和数据解码库nvJPEG。   在CVPR 2018大会上,英伟达开源了数据增...

深度学习
06/25
0
0
数据压缩实验五 JPEG原理分析及JPEG解码器的调试

一、实验原理 1、JPEG图像压缩标准基本介绍 JPEG 是Joint Photographic Experts Group(联合图像专家小组)的缩写,是第一个国际图像压缩标准。JPEG图像压缩算法能够在提供良好的压缩性能的同...

zgyggy
2017/05/23
0
0
linux下播放器的设计和开发

本文根据DawnLightPlayer的开发经验写成。DawnLithtPlayer是今天3月份开始,和maddrone一起在业余时间开发的一个跨平台,多线程的播放器,主要是在Linux下面开发的,文中所用示例代码均截自其中...

学习环境
2015/07/12
0
1
web前端图片极限优化策略

  随着web的发展,网站资源的流量也变得越来越大。据统计,60%的网站流量均来自网站图片,可见对图片合理优化可以大幅影响网站流量,减小带宽消耗和服务器压力。 一、现有web图片格式 我们...

ouven
2016/01/05
10.1K
12
图像处理库--TinyImage

TinyImage 是一个轻量级的、开源的图像处理库,支持bmp、jpeg、png、tiff(单页)图像的读写与转换,支持1、4、8、16、24、32位的图像及其不同位深之间的转换,支持黑白、1位灰、4位灰、4位彩、...

tinyimage
2014/05/30
1K
0
微软JPEG改进格式进入标准化阶段

北京时间1月30日上午消息,据国外媒体报道,曾发明了JPEG图像格式的联合图像专家组(Joint Photographic Experts Group)周四宣布,该组织已于今年1月投票决定让微软提交的JPEG改进格式——JPE...

红薯
2009/01/30
264
1
针对opencv imdecode 解码性能低的解决方案--libjpeg-turbo

opencv 对JPEG的解码,其内部实质上是基于第三方库libjpeg进行解码的。但是libjpeg本身的性能并不是很快。经测试对一张2336x4160分辨率的jpg文件进行解码,在android 环境下使用opencv imde...

二胡艺
2015/07/29
1K
0
【腾讯优测干货分享】使用多张图片做帧动画的性能优化

本文来自于Dev Club 开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57fc8cea302e4725036142f6 使用多张图片做帧动画的性能优化 背景 QQ群的送礼物功能需要加载几十...

腾讯Bugly
2016/10/11
613
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

流利阅读笔记29-20180718待学习

高等教育未来成谜,前景到底在哪里? Ray 2018-07-18 1.今日导读 在这个信息爆炸的年代,获取知识是一件越来越容易的事情。人们曾经认为,如此的时代进步会给高等教育带来众多便利。但事实的...

aibinxiao
6分钟前
2
0
第15章FTP服务搭建与配置

15.1FTP介绍 FTP多用于Windows传文件到linux rz sz在文件超过4G,就无法使用了——>安装包yum install -y install lrzsz rz把 window 上的文件传输到 linux 上 sz 把 linux 上的文件传输到 ...

Linux学习笔记
14分钟前
0
0
OSChina 周三乱弹 —— 你被我从 osc 老婆们名单中踢出了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小鱼丁:分享五月天的单曲《后来的我们 (电影《后来的我们》片名曲)》: 《后来的我们 (电影《后来的我们》片名曲)》- 五月天 手机党少年们想...

小小编辑
18分钟前
6
1
Spring Boot Admin 2.0开箱体验

概述 在我之前的 《Spring Boot应用监控实战》 一文中,讲述了如何利用 Spring Boot Admin 1.5.X 版本来可视化地监控 Spring Boot 应用。说时迟,那时快,现在 Spring Boot Admin 都更新到 ...

CodeSheep
37分钟前
0
0
Python + Selenium + Chrome 使用代理 auth 的用户名密码授权

米扑代理,全球领导的代理品牌,专注代理行业近十年,提供开放、私密、独享代理,并可免费试用 米扑代理官网:https://proxy.mimvp.com 本文示例,是结合米扑代理的私密、独享、开放代理,专...

sunboy2050
今天
0
0
实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
1
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部