文件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.pswp.cn/pingmian/76355.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76355.shtml
英文地址,請注明出處:http://en.pswp.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&#…