第2、3講 圖像的存儲格式

本圖像處理系列筆記是基于B站楊淑瑩老師的課程進行學習整理的。

文章目錄

  • 黑白圖像
  • 8位灰度索引圖像
  • 8位偽彩色索引圖像
  • 24位真彩色圖像
  • 圖像文件格式
  • BMP文件存儲格式
    • BMP文件頭
    • 位圖信息頭
    • 顏色表
    • 位圖信息——BITMAPINFO結構
    • BMP位圖文件匯總

按照顏色深度分類,常用圖像文件:

  • 黑白圖像
  • 8位索引圖像
  • 24位真彩色圖像

黑白圖像

單色圖像,二值圖像,每個像素由0 或 1 組成

8位灰度索引圖像

一個數據矩陣 X 和一個調色板矩陣 MAP

X=[015020012050180250220100](1)X=\left[ \begin{matrix} 0 & 150 & 200 \\ 120 & 50 & 180 \\ 250 & 220 & 100 \end{matrix} \tag{1}\right] X=???0120250?15050220?200180100????(1)

調色板MAP:

索引號BGR
0000
1111
2222
255255255255

即圖像的數據矩陣中,每一個元素的值即為索引號的值,其圖像顏色表代表了BGR的分量各是多少。8位灰度索引圖像中,索引號的值和RGB分量的值相同。

各像素信息由一個量化的灰度級來描述,沒有彩色信息。其像素值越大,圖像越亮。

8位偽彩色索引圖像

每個像素的信息由RGB三原色構成的圖像,其中RGB是由不同的灰度級來描述的。

  • 顏色表R G B分量值不全相等。
  • 像素值是圖像顏色表的索引地址

顏色索引表

索引號RGB
25500
02550
00255
255255255
000
0255255
2550255
2552550

24位真彩色圖像

  • 每一像素由RGB三個分量組成
  • 每個分量各占8位,取值范圍為0~255,每個像素24位。

表示如下:

(207,137,130)(220,179,163)(215,169,161)…

以三個分量的形式可表示如下:
R=[25524024025508025500](2)R=\left[ \begin{matrix} 255 & 240 & 240 \\ 255 & 0 & 80 \\ 255 & 0 & 0 \end{matrix} \tag{2}\right] R=???255255255?24000?240800????(2)
G=[01608025525516002550](3)G=\left[ \begin{matrix} 0 & 160 & 80 \\ 255 & 255 & 160 \\ 0 & 255 & 0 \end{matrix} \tag{3}\right] G=???02550?160255255?801600????(3)
B=[08016000240255255255](4)B=\left[ \begin{matrix} 0 & 80 & 160 \\ 0& 0 & 240 \\ 255 & 255 & 255 \end{matrix} \tag{4}\right] B=???00255?800255?160240255????(4)

圖像文件格式

  • BMP格式
  • GIF格式
    • 主要用于不同平臺上交流和傳輸,而不是作為文件的存儲格式,最大不能超過64M,顏色最多為256色。
  • TIFF格式
    • 其考慮了擴展性、方便性和可修改性,是最復雜的一種,要求用更多的代碼來控制它,結果導致文件讀寫速度慢,代碼長
  • JPEG格式

BMP文件存儲格式

BMP文件組成

  • BMP文件頭
  • 位圖信息頭
  • 顏色表
  • 位圖數據

BMP文件頭

在這里插入圖片描述
bfType表示文件類型,bfSize表示文件大小,bfOffBits表示位圖數據的起始位置

位圖信息頭

在這里插入圖片描述
biSize表示該結構共多少個字節,即從biSize到biClrImportant共40個字節,故biSize為40
biWidth和biHeight為圖像的寬度和高度,以像素為單位
biPlanes是位平面數,一般是1
biBitCount是每個像素所需的位數,8位偽彩色圖像,8位灰度圖像,biBitCount為8(8位帶顏色表),24位偽彩色圖像,biBitCount為24(24位不帶顏色表
biCompression為位圖壓縮類型,BMP圖像不壓縮,此處為0
biSizeImage為位圖的大小,以字節為單位,整個位圖的大小
最后四個標準情況下為0

顏色表

在這里插入圖片描述
除了紅綠藍三個分量,還有一個保留的字節,rgbReserved

位圖信息——BITMAPINFO結構

在這里插入圖片描述

BMP位圖文件匯總

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446539.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446539.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446539.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ubuntu18.04.4 環境下對屬性加密算法CP-ABE環境搭建

注意事項 cpabe依賴pbc,pbc依賴gmp,gmp依賴M4、bison、flex如果權限不夠 ,命令的前面加上sudo ,不要直接使用root用戶進行操作,其帶來的隱患有很多 第一步 配置簡單的環境 簡單環境 包括gcc、g、make、cmake、openss…

C語言 函數指針 int(*ptr)(int,int)

基本介紹 函數指針:指向函數的指針 與數組類似 定義 Int(*pmax)(int ,int)max; Int(*pmax)(int x,int y)max;//形參名稱不重要 函數返回類型(*指針)(形參類型)函數名稱; 具體案例 代碼: *pmax取到函數本身 調用函數指針方式: (*pmax)(x,y); pmax(x,y);//與java中調用函數一…

C++ primer 第14章 操作重載與類型轉換

文章目錄基本概念直接調用一個重載的運算符函數某些運算符不應該被重載使用與內置類型一致的含義選擇作為成員或者非成員輸入和輸出運算符重載輸出運算符<<輸出運算符盡量減少格式化操作輸入輸出運算符必須是非成員函數重載輸入運算符>>算術和關系運算符相等運算符…

C語言 回調函數 produce(arr,len,getRand)

基本介紹 回調函數:形參中包含另一個函數的函數指針 用函數指針接收另一個函數 案例 代碼解析 具體代碼 #include<stdio.h> #include<stdlib.h> //回調函數--//函數原型 int getRand(); int *produce(int*arr,int len,int(*get)()); int main() {int arr[10…

從零開始配置服務器密碼機的開發環境

開發環境環境配置安裝gcc編譯器安裝g編譯器安裝make安裝cmake安裝ssh安裝git和配置安裝大文件管理工具git-lfs安裝數據庫sqlite3安裝數據庫sqlite_orm文件安裝Openssl安裝Tcl和Tk安裝tcl-expect-dev安裝boost安裝clang-format安裝Clion注意事項安裝automake和libudev-dev環境配…

C語言 動態內存分配機制(堆區) int*p=malloc(5*sizeof(4))

C程序內存分配圖 棧區:局部變量 堆區:動態分配的數據 靜態存儲區/全局區:全局變量,靜態數據 代碼區:代碼,指令 內存分配說明 內存動態分配的相關函數 堆區: #inlcude<stdlib.h> Malloc(size);//分配長度為size個字節的連續空間 Calloc(n,size);//分配size個長度為n…

C++ primer 第15章 面向對象程序設計

文章目錄前言OOP&#xff1a;概述繼承動態綁定定義基類和派生類定義基類成員函數與繼承訪問控制與繼承定義派生類派生類中的虛函數派生類對象及派生類向基類的類型轉換派生類構造函數派生類使用基類的成員繼承與靜態成員派生類的聲明被用作基類的類防止繼承的發生類型轉換與繼承…

服務器密碼機部分文件的介紹學習

相關文件包 automake,autoconf使用詳解

C語言 結構體 struct Cat cat1;

引入 使用傳統技術解決 需要定義多個變量或數組 結構體與結構體變量的關系示意圖 類似Java類中的對象(結構體)與屬性(結構體變量) 一切物體都可以看作對象(結構體) 補充:C語言數據類型 簡單使用案例 代碼 Cat是我們自己定義的數據類型 struct Cat cat1;//創建struct Cat的…

boost Filesystem Library Version 3關于文件的一些函數封裝 fsync()函數

boost boost Filesystem Library Version 3boost::filesystem使用方法,根據路徑創建文件夾使用boost.filesystem檢查文件是否存在的正確方式std::filesystem::temp_directory_path關于C#:與boost :: filesystem :: unique_path()等效的C 17是什么?C++ 檔案、資料夾、路徑處理…

c++面向對象高級編程 總目錄

本文是對學習侯捷視頻 c面向對象高級編程系列博客的目錄總索引。 c面向對象高級編程 學習一 不帶指針的類&#xff1a; 訪問私有成員變量的方式&#xff0c;內聯inline&#xff0c;常量成員函數&#xff0c;構造函數&#xff0c;值傳遞&#xff0c;引用傳遞&#xff0c;操作符…

C語言 共用體/聯合體 union

引入 傳統技術的缺陷—結構體 共用體基本介紹 共用體與結構體一樣都是值傳遞 定義共用體的三種方式 內存布局 共用體數據空間占用最大的成員的數據空間大小 案例解析 1) 2) 3) 4) 注: 1010 1101 0101 0100所對應的十進制是負數 計算機中的二進制都是以補碼存儲的,所…

C++ Makefile文件詳解

什么是Makefile文件 一個工程&#xff0c;源文件不計其數&#xff0c;按照類型、功能、模塊分別放在對應的若干個目錄中Makefile定義了一系列的規則&#xff0c;比如定義文件編譯的先后順序。類似shell腳本&#xff0c;也可以執行操作系統的命令Makefile帶來的好處是自動化編譯…

C語言 項目練習-家庭收支軟件

目標 需求說明 界面說明 登記收入界面: 登記支出界面 收支明細界面 退出界面 項目代碼改進要求 自己完成的代碼 版本1 #include<stdio.h> #include<string.h> void choose(int button,int i); //項目--家庭收支軟件 static double total10000;//總金額 #de…

c++ fmt 庫安裝和使用示例、clion配置

安裝 git clone https://github.com/fmtlib/fmt.gitmake .mkae && make install CLion使用 使用和安裝存在出入下載源碼&#xff0c;可以先 clone 到你的項目中去&#xff0c;https://github.com/fmtlib/fmt &#xff0c;我放到的是項目的 dependencies 目錄然后在…

C語言 項目 CRM系統(客戶信息管理系統)

項目目標 項目需求說明 系統界面 1)添加客戶界面 通過編號來區分客戶 2)刪除客戶界面 對用戶輸入的編號進行核查,存在與否,合法與否 3)顯示客戶列表界面 4)修改客戶信息的界面 項目設計 Customer結構體的設計 CRM系統結構框架圖 案例代碼 #include <stdio.h>…

代碼重構 防火墻 相關知識

參考 依據Linux命令以及sysconf下現有的iptables命令&#xff0c;詳見hsm_sysconf_server/src/sysconf_server.cpp中的firewall規則。 接口名稱 firewall_manager 目的(現實) 根據網口直連獲取當前eth0和eth1的各種信息保證設置的正確性 以及要針對管理口和服務口設計不…

C語言 文件的基本介紹

基本介紹 輸入流與輸出流 重點在C程序(內存)的數據移動方向 對于C程序(內存) 輸入數據:輸入流 輸出數據:輸出流 輸入 和輸出 C標準庫 標準輸入輸出庫 標準文件 getchar()&putchar()函數 代碼 #include<stdio.h> #include<stdlib.h> //文件--getchar()和…

ubuntu修改字體 樣式

使用 快捷鍵 ctrlaltt 打開終端安裝gnome-tweaks桌面管理工具 sudo apt install gnome-tweaksaltf2 在運行窗口輸入 gnome-tweaks 命令&#xff0c;然后回車打開優化窗口&#xff0c;選擇第二個front字體選項ubuntu顯示中文

C語言 文件的讀寫

引入 OS操作系統 打開文件fopen()函數 讀寫模式: r:讀取已有文件 w:文件不存在,創建文件并寫入文件.文件存在,內容清零,再寫入文件 a: 文件不存在,創建文件并寫入文件.文件存在,以追加的形式寫入文件 r:讀寫已有文件 w:文件不存在,創建文件并讀寫文件.文件存在,內容清零,再…