文件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库文件存在,程序运行才不会报错。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/76355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3 history路由模式刷新页面报错问题解决

在使用history路由模式时刷新网页提示404错误,这是改怎么办呢。 官方解决办法 https://router.vuejs.org/zh/guide/essentials/history-mode.html

3D激光轮廓仪知识整理(待完善)

文章目录 1.原理和应用场景1.1 相机原理1.1.1 测量原理1.1.2 相机激光器1.1.3 沙姆镜头1.1.4 相机标定1.1.5 中心线提取 1.2 应用场景1.2.1 测量相关应用1.2.2 缺陷检测相关应用 2.相机参数介绍及选型介绍2.1 成像原理2.2 原始图成像2.3 生成轮廓图2.4 相机规格参数2.4.1 单轮廓…

w285药店管理系统的设计与实现

🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…

Google Chrome Canary版官方下载及安装教程【适用于开发者与进阶用户】

谷歌浏览器(Google Chrome)以其高性能、强扩展性和良好的用户体验深受全球用户喜爱。在其多个版本中,Chrome Canary因具备最前沿的功能测试环境,成为开发者和技术探索者的首选。如果你希望第一时间体验Google Chrome最新功能&…

RocketMQ深度百科全书式解析

​一、核心架构与设计哲学​ ​1. 设计目标​ ​海量消息堆积​:单机支持百万级消息堆积,适合大数据场景(如日志采集)。​严格顺序性​:通过队列分区(Queue)和消费锁机制保证局部顺序。​事务…

每日一题(小白)暴力娱乐篇19

样例: 6 1 1 4 5 1 4 输出: 56 66 52 44 54 64 分析题意可以得知,就是接收一串数字,将数字按照下标每次向右移动一位(末尾循环到第一位),每次移动玩计算一下下标和数字的乘积且累加。 ①接收…

如何应对“最后时刻任务堆积”(鼓包现象)

应对“最后时刻任务堆积”(鼓包现象)的方法包括:合理规划项目时间表、强化进度跟踪管理、明确任务优先级、有效的资源配置、提升团队沟通效率。其中,强化进度跟踪管理尤为关键。根据项目管理协会(PMI)的调查…

19C-19.3环境-impdp导入到view时卡死

帮客户导入一个用户时,发现VIEW部分无法进行下去 Processing object type SCHEMA_EXPORT/TABLE/IDENTITY_COLUMN Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC Processing object type SCHEMA_EXPORT/FUNCTION/FUNCTION Processing object type SCH…

一、简单的 Django 服务

一、配置虚拟环境 1.1 创建一个文件夹在导航栏输入cmd打开 1.2 安装依赖两个库 pip install virtualenv virtualenvwrapper-win -i https://pypi.tuna.tsinghua.edu.cn/simple验证是否安装成功 virtualenv --version pip show virtualenvwrapper-win 1.3 创建虚拟环境 mkvi…

道路运输安全员岗位事项有哪些?

道路运输安全员的岗位事项主要包括以下几个方面: 安全制度与计划 参与制定和完善道路运输企业的安全管理制度、安全操作规程等,确保各项安全工作有章可循。协助制定年度安全工作计划和目标,并负责组织实施和监督执行情况,定期对…

潇洒浪: Dify 上传自定义文件去除内容校验 File validation failed for file: re.json

Dify上传文件 添加其他文件类型如 my.myselfsuffix 上传成功 执行报错 File validation failed for file: re.json 解决办法 Notepad 搜索dify源码 注释掉,重启容器 或者直接在容器中修改重启

工作记录 2015-08-24

工作记录 2015-08-24 序号 工作 相关人员 1 更新76.19的D:\FNEHRRD,更新的差不多了,还在测试中。具体情况见附件。 郝 识别引擎监控 Ps (iCDA LOG :剔除了204篇ASG_BLANK之后的结果): LOG_File 20150823.txt BLANK_CDA/ALL 102/947 (10.8%) TIME…

Robot---SPLITTER行星探测机器人

1 背景 先给各位读者朋友普及一个航天小知识,截止到目前为止,登陆火星的火星车有哪些?结果比较令人吃惊:当前只有美国和中国登陆过火星。 “勇气”号(Spirit):2004年1月4日,美国国家…

Python asyncio

一些Pre关键概念 asyncio 本质上还是单进程单线程的Python程序; 建立event_loop 概念,上面event_loop 可以理解为大脑,下面是若干个可执行的Task; Task 没有控制权,没有办法控制event_loop 执行某个Task,只…

Dify什么?Dify 零门槛打造专属 AI 应用

Dify 是一个专注于简化大语言模型(LLM)应用开发的开源平台,旨在帮助用户通过可视化界面和模块化工具快速构建、部署和管理 AI 驱动的应用程序。以下是其核心特点: 主要功能 可视化编排 提供直观的界面,无需深入编码即…

Hierarchical Reinforcement Learning for Course Recommendation in MOOCs论文阅读

论文1简介 标题:Hierarchical Reinforcement Learning for Course Recommendation in MOOCs 作者:Jing Zhang, Bowen Hao, Bo Chen, Cuiping Li, Hong Chen, Jimeng Sun 单位: 中国人民大学教育部数据工程与知识工程重点实验室、 中国人民大学信息学院…

零基础学Git

大家好!最近跟着网上的课程看了一下git的课,浅浅地学了一下,以下内容为作为一个小白初识git的学习历程和学习笔记!!! 1.Git概述 1.1什么是Git? 分布式版本控制系统(DVCS)&#x…

算法 模版

cin cout加快读取速度&#xff1a; ios::sync_with_stdio(false); 高精度*高精度 vector<int> mul(vector<int>& a, vector<int>& b) {vector<int>c(b.size()a.size()5,0);for (int i 0; i < a.size(); i) {for (int j 0; j < b.si…

4185 费马小定理求逆元

4185 费马小定理求逆元 ⭐️难度&#xff1a;简单 &#x1f31f;考点&#xff1a;费马小定理 &#x1f4d6; &#x1f4da; import java.util.Scanner; import java.util.Arrays;public class Main {static int[][] a;public static void main(String[] args) {Scanner sc …

【SQL】常见SQL 行列转换的方法汇总 - 精华版

【SQL】常见SQL 行列转换的方法汇总 - 精华版 一、引言二、SQL常见的行列转换对比1. 行转列 Pivoting1.1 ​​CASE WHEN 聚合函数​​1.2 ​​IF 聚合函数​​1.3 ​​PIVOT操作符​​ 2.列转行 Unpivoting2.1 UNION ALL​​2.2 ​​EXPLODE函数&#xff08;Hive/Spark&#…