当前位置: 首页 > news >正文

文件IO5(JPEG图像原理与应用)

JPEG图像原理与应用

⦁ 基本概念

JPEG(Joint Photographic Experts Group)指的是联合图像专家组,是国际标准化组织ISO制订并于1992年发布的一种面向连续色调静止图像的压缩编码标准,所以也被称为JPEG标准。

同样,JPEG也是一种常用的图像存储格式,JPEG的文件格式有两种文件扩展名:.jpg和.jpeg,这两种扩展名是相同的,我们可以把.jpg的文件改名为.jpeg,而对文件本身不会有任何影响。

和其他相同图像质量的文件格式相比,JPEG格式的压缩比是最高的,也就是说在图像质量相差不大的情况下,JPEG文件所占的内存更小。所以JPEG图像一般适合进行网络传输。

⦁ 编解码库

由于JPEG格式的文件是经过压缩的,所以用户无法向访问BMP位图一样直接读取JPEG文件中的内容,而是需要使用对应的libjpeg解码库对JPEG文件进行解码,从而得到解码之后的RGB颜色分量,然后把解码之后的RGB颜色分量写入到LCD屏即可。

在这里插入图片描述
libjpeg是一款开源的JPEG图像库,可以用于编码JPEG文件格式或者用于解码JPEG文件格式,这套库是由IJG(Independent JPEG Group)独立小组进行维护与发布,libjpeg库完全利用C语言设计并且内部集成各种用于编解码算法的函数接口,广泛用于各种图像处理,比如OpenCV(开源的跨平台计算机视觉库)读取图像的底层实现逻辑就是基于libjpeg库的。

由于IJG独立小组不属于官方组织,也就是说libjpeg库不属于标准库,而属于第三方库,所以Linux系统并没有直接为用户安装libjpeg库,用户如果打算使用libjpeg库就需要完成库的移植工作。

⦁ 库的移植
(1) 下载需要移植的库的源码包,libjpeg库源码包在官网可以下载 www.ijg.org,如图所示
在这里插入图片描述
(2) 解压压缩包,解压后找到自述文件README,打开README了解libjpeg库的使用规则!
在这里插入图片描述
(3) 打开源码包中的install.txt的文本,学习libjpeg库的移植和安装的步骤,移植libjpeg的步骤分为三步:配置(./configure) + 编译(make) + 安装(make install)。
在这里插入图片描述
(4) 把下载好的源码包jpegsrc.v9f.tar.gz发送到linux系统的家目录下进行解压,注意不可以在共享文件夹进行解压
在这里插入图片描述
(5) 切换到解压后的jpeg-9f的文件夹内,然后输入指令配置libjpeg库,配置的时候需要使用一个叫做configure的配置文件,该配置文件有两个选项非常重要:–prefix 和 --host

在这里插入图片描述
在这里插入图片描述
(6) 配置成功之后,会得到一个makefile脚本文件,此时可以完成移植的第二步:编译,在命令行输入指令:make ,该指令会自动执行makefile
在这里插入图片描述
(7) 编译通过之后,则可以完成libjpeg库的安装,此时在命令行输入指令: make install
在这里插入图片描述
(8) 安装完成后,可以在用户指定的安装路径中找到生成的libjpeg库的头文件和库文件,此时用户可以选择拷贝出来,就可以设计程序时使用。
在这里插入图片描述
(9) 把include文件夹和lib文件夹与自己的工程文件放在同一个路径,方便后期的工程维护!
在这里插入图片描述
⦁ 库的使用
在这里插入图片描述
在这里插入图片描述
为了可以把一张jpg图片显示在LCD上,所以需要把jpg图片进行解压,解压之后就可以得到图片内部的像素点的颜色分量,就可以把像素点的颜色分量向LCD的像素点写入。就需要掌握jpg图片的解压流程(背下来)。

⦁ 解码流程

(1) 创建解码对象,并且对解码对象进行初始化,另外需要创建错误处理对象,并和解码对象进行关联。

在这里插入图片描述
(2) 打开待解码的jpg图片,使用fopen的时候需要添加选项”b”,以二进制方式打开文件!
在这里插入图片描述
(3) 读取待解码图片的文件头,并把图像信息和解码对象进行关联,通过解码对象对jpg图片进行解码
在这里插入图片描述
(4) 可以选择设置解码参数,如果打算以默认参数对jpg图片进行解码,则可以省略该步骤!

在这里插入图片描述
(5) 开始对jpg图片进行解码,调用函数之后开始解码,可以得到图像宽、图像高等信息!

在这里插入图片描述
(6) 开始设计一个循环,在循环中每次读取1行的图像数据,并写入到LCD中,注意:转换算法需要用户自己设计。
在这里插入图片描述
(7) 在所有的图像数据都已经解码完成后,则调用函数完成解码即可,然后释放相关资源!
在这里插入图片描述
⦁ 程序设计
在这里插入图片描述
⦁ 程序编译

由于libjpeg库不是直接安装在Linux系统下,这个libjpeg库是拷贝出来,所以在Linux系统路径下是找不到libjpeg的头文件和库文件的,所以在编译程序的时候需要使用编译器的选项: -I 指定头文件的路径 -L 指定库文件的路径 -l 指定库文件的名称(lib缩写)
在这里插入图片描述

⦁ 下载调试

注意:编译通过的可执行文件是需要在6818开发板上进行执行,所以在6818开发板上运行程序的时候是需要调用libjpeg库文件,所以需要确保在开发板的Linux系统中的 /lib目录下要有libjpeg.so.9库文件存在,程序运行才不会报错。

相关文章:

  • 【数学建模】(智能优化算法)鲸鱼优化算法(Whale Optimization Algorithm)详解与应用
  • Java实现安卓手机模拟操作
  • 深入解析SLAM中的状态估计问题:从理论到C++实现
  • 一些简单但常用的算法记录(python)
  • C++算法之代码随想录(链表)——基础知识
  • 解决opencv中文路径问题
  • 力扣热题100刷题day63|49.字母异位词分组
  • Windows 图形显示驱动开发-WDDM 1.2功能_WDDM 1.2 和 Windows 8
  • Uniapp Vue 实现当前日期到给定日期的倒计时组件开发
  • 8.4 容器2
  • 尼日利亚拉各斯云服务器和VPS的综合分析,涵盖其优势、价格、推荐服务商及选择建议
  • 大模型论文:Language Models are Unsupervised Multitask Learners(GPT2)
  • netstat 查看端口占用、杀死进程
  • JAVA实现在H5页面中点击链接直接进入微信小程序
  • 课堂总结。
  • edge 更新到135后,Clash 打开后,正常网页也会自动跳转
  • 微服务拆分的原则、时机、方法以及常见问题
  • C++中stack函数的用法示例
  • 大模型——Llama Stack快速入门 部署构建AI大模型指南
  • 探索 Vue 3 中 vue-router 的 router.resolve () API
  • 深圳网站建设服务公司/百度的网页地址
  • 怎么做网站免费/线上广告投放方式
  • 公司自己做网站流程和备案/百度上做推广怎么做
  • 动物园网站建设的可行性分析/北海seo快速排名
  • 在线制作头像模板/seo优化运营
  • 网站推广网络/seo数据