圖形圖像基礎知識(1)---- RGB/YUV 顏色格式

目錄

      • 常見RAW顏色格式
      • RGB類型
      • YUV類型
        • YUV類型匯總
        • YUV444類型
        • YUV422類型
        • YUV420類型
      • 參考實例

常見RAW顏色格式

  • RGB 類型:
    ARGB1010102,ABGR1010102,BGRA1010102,RGBA1010102
    ARGB8888,ABGR8888,BGRA8888,RGBA8888
    XRGB8888,XBGR8888,BGRX8888,RGBX8888
    RGB888,BGR888
    RGB565,BGR565

  • YUV 類型:
    8-bit YUV 4:2:2 2-plane
    8-bit YUV 4:2:2 1-plane(VYUY,YVYU)
    8-bit YUV 4:2:0(2-plane)
    8-bit YUV 4:2:0(3-plane)

RGB類型

RGB顏色空間以 R(Red:紅)、G(Green:綠)、B(Blue:藍) 三種基本色為基礎,進行不同程度的疊加,產生豐富而廣泛的顏色,所以俗稱三基色模式
不同的顏色格式表示的是各個分量占用的 BIT 數,比如 RGBA888 表示Red、Green、Blue、Alpha 通道各占 8BIT,每個像素占 32BIT(4字節)

YUV類型

YUV是一種顏色編碼方法,是編譯 true-color 顏色空間(color space)的種類,常使用在各個視頻處理組件中; YUV在對照片或視頻編碼時,考慮到人類的感知能力,允許降低色度的帶寬。其中的**“Y”**表示明亮度,也就是灰階值,即黑到白的范圍值,所以只有Y值的圖像是黑白的,U表示色彩值,V表示色彩的飽和度,UV用于指定像素的顏色

YUV類型匯總

YUV格式按照存儲方法可以分為下面兩類:

  • 平面格式 (planar formats
    將Y、U、V的三個分量分別存放在不同的存儲空間中,先連續存儲所有像素點的Y,緊接著存儲所有像素點的U,隨后是所有像素點的V

  • 緊縮格式 (packed formats
    將Y、U、V值按照像素存儲在相同的存儲空間,和RGB的存放方式類似,每個像素點的Y,U,V是連續交替存儲的
    按照采樣方式的不同,分為下面幾種類型
    YUV4:4:4 表示完全取樣。
    YUV4:2:2 表示2:1的水平取樣,垂直完全采樣。
    YUV4:2:0 表示2:1的水平取樣,垂直2:1采樣。

YUV444類型

每個像素點都存儲對應的 YUV 值,注意 444 不是代表每個分量的字節數;YUV 每個分量都需要占用一個字節(8bit)
所以,在1080x1920的圖像中,需要1080x1920x(1Y + 1U + 1V(字節)來存儲
YUV 444 格式在屏幕上分布如下圖所示:
YUV444.png

YUV422類型

每兩個相鄰像素點共用一對UV值,所以在1080x1920的圖像中,需要1080x1920x(1Y+ 0.5U + 0.5V)(字節)來存儲
YUV422格式在屏幕上分布如下圖所示:
(所以 YUV422 類型所占字節數是 RGB/YUV444 類型的 2/3)
YUV422.png

YUV422 存儲格式:

  • YUYV packed
    YUYV.png

  • YVYU packed
    YVYU.png

  • YU16、I422
    YU16.png

  • YV16
    YV16.png

YUV420類型

每四個相鄰像素點共用一對UV 值,相當于每個Y只占用0.25U0.25V,在1080x1920的圖像中,需要1080x1920x(1Y+ 0.25U + 0.25V)(字節)來存儲
(YUV420 占用的大小是 RGB/YUV444 類型的一半,YUV420 類型可以概括為 UV 分量兩行變一行,一行變一半)
YUV422 格式在屏幕上分布如下圖所示:
YUV420.jpg

YU12(I420)、YV12
YU12-YV12.png

NV12 NV21
NV12-NV21.png

參考實例

這里將 RGB 類型轉換為 YUV類型,展示了 YUV 類型的生成方法,注意:YUV 類型的寬高必須為偶數

void yuvImage::rgb2yuv(uint8_t r, uint8_t g, uint8_t b, uint8_t& y, uint8_t& u, uint8_t&v) {float y1 = 0.299*r + 0.587*g + 0.114*b;float u1 = -0.169*r - 0.331*g + 0.5*b + 128;float v1 = 0.5*r - 0.419*g - 0.081*b + 128;y = static_cast<uint8_t>(std::round(clamp(y1, 0.0f, 255.0f)));u = static_cast<uint8_t>(std::round(clamp(u1, 0.0f, 255.0f)));v = static_cast<uint8_t>(std::round(clamp(v1, 0.0f, 255.0f)));
}void yuvImage::rgb2nv12() {for(int y = 0; y < height; ++y) {for(int x = 0; x < width; ++x) {int idx = (height -1 -y)*width + x;int rgbidx = idx*3;uint8_t r = pixels[rgbidx+2];uint8_t g = pixels[rgbidx+1];uint8_t b = pixels[rgbidx];uint8_t yVal,uVal,vVal;rgb2yuv(r, g, b, yVal, uVal, vVal);yplane[y*width + x] = yVal;if(y%2 == 0 && x%2 == 0) {int uvIdx = (y/2)*(width/2) + x/2;uvplane[uvIdx*2] = uVal;uvplane[uvIdx*2+1] = vVal;}}}
}void yuvImage::save(const std::string& filename) {std::ofstream outFile(filename, std::ios::binary);if(!outFile.is_open()) {std::cerr << "fail to constuct file. " << std::endl;}outFile.write(reinterpret_cast<char*>(yplane.data()), yplane.size());outFile.write(reinterpret_cast<char*>(uvplane.data()), uvplane.size());std::cout << "save nv12 file " << filename << " success!." << std::endl;
}

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

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

相關文章

CentOS7.9安裝OpenSSL 1.1.1t和OpenSSH9.9p1

一、臨時開啟telnet登錄方式&#xff0c;避免升級失敗無法登錄系統 &#xff08;注意telnet登錄方式存在安全隱患&#xff0c;升級openssh相關服務后要記得關閉&#xff09; 1.安裝telnet服務 yum -y install xinetd telnet* 2.允許root用戶通過telnet登陸&#xff0c;編輯…

使用DCI和RTIT技術進行精準調優--看錄像

使用DCI和RTIT技術進行精準調優_嗶哩嗶哩_bilibili 每次看錄像都記錄一下。 PT/RTIT簡介 DCI技術即通過USB3.0接口去訪問調試目標機的JTAG組件&#xff0c;凡是運行在CPU上的代碼均可以進行調試&#xff0c;這就沒有了使用WinDBG調試時&#xff0c;會出現的不能調試敏感代碼…

從MCP基礎到FastMCP實戰應用

MCP(https://github.com/modelcontextprotocol) MCP&#xff08;模型上下文協議&#xff09; 是一種專為 基于LLM的工具調用外部工具而設計的協議 &#xff0c; 本質上是 LLM ? 工具之間的RPC&#xff08;遠程過程調用&#xff09; 的一種安全且一致的處理方式&#xff0c; 是…

深入理解C語言中的整形提升與算術轉換

深入理解C語言中的整形提升與算術轉換 一.整形提升&#xff1a;概念與原理 在C語言中&#xff0c;整形提升&#xff08;Integer Promotion&#xff09;是一個重要但容易被忽視的概念。它指的是在表達式中&#xff0c;任何小于int類型的整型&#xff08;如char、short&#xf…

編程題python常用技巧-持續

1.字典 1.1排序 在Python中&#xff0c;要按照字典的值進行排序&#xff0c;可以按照以下步驟操作&#xff1a; 方法說明 ?獲取鍵值對列表?&#xff1a;使用 dict.items() 獲取字典的鍵值對視圖。?排序鍵值對?&#xff1a;使用 sorted() 函數&#xff0c;并通過 key 參…

硬件工程師面試常見問題(11)

第五十一問&#xff1a;器件手冊的翻譯題目 要學英語啊&#xff0c;孩子。 第五十二問&#xff1a;二極管三極管常識題 1.二極管的導通電壓一般是 0.7V 2.MOS管根據摻雜類型可以分為 NMOS和PMOS 3.晶體三極管在工作時,發射結和集電結均處于正向偏置,該晶體管工作在一飽和態。…

mysql 配置文件中的[client]、[mysqld]、[mysqldump]和[mysql]區塊的作用區別

1. [client] 區塊 作用&#xff1a; 適用于 所有 MySQL 客戶端工具&#xff08;如 mysql 命令行客戶端、mysqldump、mysqladmin 等&#xff09;。 常見配置項&#xff1a; [client] host 127.0.0.1 # 默認連接的服務器地址 port 3306 # 默認端口 user root …

SARSA 算法詳解:python從零實現

喜歡可以訂閱專欄喲 第一章 強化學習基礎與核心概念 1.1 強化學習的定義與特點 強化學習(Reinforcement Learning, RL)是機器學習三大范式之一(監督學習、無監督學習、強化學習),其核心思想是通過智能體(Agent)與環境(Environment)的持續交互來學習最優策略。與監督…

(C題|社交媒體平臺用戶分析問題)2025年第二十二屆五一數學建模競賽(五一杯/五一賽)解題思路|完整代碼論文集合

我是Tina表姐&#xff0c;畢業于中國人民大學&#xff0c;對數學建模的熱愛讓我在這一領域深耕多年。我的建模思路已經幫助了百余位學習者和參賽者在數學建模的道路上取得了顯著的進步和成就。現在&#xff0c;我將這份寶貴的經驗和知識凝練成一份全面的解題思路與代碼論文集合…

AI重塑SEO關鍵詞策略

內容概要 傳統SEO策略主要依賴人工經驗與基礎工具進行關鍵詞布局&#xff0c;存在效率低、覆蓋維度單一等痛點。而AI技術的介入&#xff0c;使關鍵詞優化從靜態詞庫匹配轉向動態語義網絡構建。通過自然語言處理&#xff08;NLP&#xff09;與深度學習模型&#xff0c;AI不僅能…

【Unity】 組件庫分類詳解

1?? Audio&#xff08;音頻組件&#xff09; 用于處理游戲中的聲音。 Audio Source 讀音[???di?? ?s??s]&#xff0c;音頻源組件&#xff0c;用于播放音頻文件&#xff0c;可設置音量、Pitch、循環播放等屬性&#xff0c;是音頻播放的核心組件。 Audio Listener 讀音…

【區塊鏈】區塊鏈技術介紹

引言 區塊鏈技術自2008年中本聰提出比特幣概念以來&#xff0c;逐漸從加密貨幣的底層技術演變為一場顛覆傳統信任機制的全球性革命。它不僅重塑了金融體系&#xff0c;更在物流、醫療、政務等領域展現出巨大潛力。本文將用通俗易懂的語言&#xff0c;結合實例與原理&#xff0c…

MySQL零基礎入門:Ubuntu環境安裝與操作精解

知識點1【數據庫】 數據的存儲方式&#xff0c;我們之前學的&#xff0c;從變量&#xff0c;數組&#xff0c;鏈表&#xff0c;最后到文件&#xff0c;文件之上&#xff0c;便是數據庫&#xff0c;而我們要介紹的MySQL就是數據庫的關系數據庫中的其中一種。 1、數據庫 本質&…

力扣——23合并升序鏈表

目錄 1:題目描述&#xff1a; 2.算法思想&#xff1a; 3.代碼展示&#xff1a; 1:題目描述&#xff1a; 給你一個鏈表數組&#xff0c;每個鏈表都已經按升序排列。 請你將所有鏈表合并到一個升序鏈表中&#xff0c;返回合并后的鏈表。 示例 1&#xff1a; 輸入&#xff…

AI重構危化品進口清關:一場效率與安全的雙重革命

在全球化工產業鏈深度捆綁的今天&#xff0c;每年超過3億噸危險化學品通過中國各大口岸流入國內市場。這些支撐著新能源電池、半導體材料等戰略產業的“工業血液”&#xff0c;其進口清關流程卻長期困于效率與安全的兩難困境&#xff1a;人工審核單據平均耗時72小時&#xff0c…

牛客網題解 | 棧的壓入、彈出序列

棧的壓入、彈出序列 一、題目鏈接二、題目三、算法原理&#xff1a;用一個棧模擬入棧出棧的過程四、編寫代碼 一、題目鏈接 棧的壓入、彈出序列 二、題目 三、算法原理&#xff1a;用一個棧模擬入棧出棧的過程 思路&#xff1a;用一個棧模擬入棧出棧的過程&#xff0c;模擬出…

使用CubeMX新建DMA工程——存儲器到存儲器模式

目錄 1、新建板級支持包 2、修改main.c 3、程序流程 4、問題 新建工程的基本操作步驟參考這里&#xff1a; 【【野火】STM32 HAL庫開發實戰指南 教學視頻 手把手教學STM32全系列 零基礎入門CubeMXHAL庫&#xff0c;基于野火全系列STM32開發板】 https://www.bilibili.com/…

HTML5 新增的主要標簽整理

一、語義化標簽&#xff08;讓網頁結構更清晰&#xff09; 1. <header> 和 <footer> 定義&#xff1a;表示網頁的「頂部區域」和「底部區域」。場景&#xff1a; <header>&#xff1a;放 Logo、導航欄、搜索框。<footer>&#xff1a;放版權信息、聯系…

Mysql數據庫高可用解決方案-Mysql Router

目錄 一.MySQL Router介紹 1. 什么是 MySQL Router&#xff1f; 2. MySQL Router 的主要用途 3. MySQL Router 的工作原理 4. MySQL Router 的核心組件 5. MySQL Router 的部署和配置 6. MySQL Router 的優勢 7. 注意事項 8. MySQL Router 與其他工具的對比 9. 總結 …

【學習筆記】機器學習(Machine Learning) | 第六周|過擬合問題

機器學習&#xff08;Machine Learning&#xff09; 簡要聲明 基于吳恩達教授(Andrew Ng)課程視頻 BiliBili課程資源 文章目錄 機器學習&#xff08;Machine Learning&#xff09;簡要聲明 摘要過擬合與欠擬合問題一、回歸問題中的過擬合1. 欠擬合&#xff08;Underfit&#x…