入門視訊採集與處理(學會分析YUV資料
做視訊採集與處理,自然少不了要學會分析YUV資料。因為從採集的角度來說,一般的視訊採集晶片輸出的碼流一般都是YUV資料流的形式,而從視訊處理(例如H.264、MPEG視訊編解碼)的角度來說,也是在原始YUV碼流進行編碼和解析,所以,瞭解如何分析YUV資料流對於做視訊領域的人而言,至關重要。本文就是根據我的學習和了解,簡單地介紹如何分析YUV資料流。
YUV,分為三個分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用於指定畫素的顏色。
與我們熟知的RGB類似,YUV也是一種顏色編碼方法,主要用於電視系統以及模擬視訊領域,它將亮度資訊(Y)與色彩資訊(UV)分離,沒有UV資訊一樣可以顯示完整的影象,只不過是黑白的,這樣的設計很好地解決了彩色電視機與黑白電視的相容問題。並且,YUV不像RGB那樣要求三個獨立的視訊訊號同時傳輸,所以用YUV方式傳送佔用極少的頻寬。
好了,言歸正傳,談談如何分析YUV碼流吧。YUV碼流有多種不同的格式,要分析YUV碼流,就必須搞清楚你面對的到底是哪一種格式,並且必須搞清楚這種格式的YUV取樣和分佈情況。下面我將介紹幾種常用的YUV碼流格式,供大家參考。
1. 取樣方式
YUV碼流的儲存格式其實與其取樣的方式密切相關,主流的取樣方式有三種,YUV4:4:4,YUV4:2:2,YUV4:2:0,關於其詳細原理,可以通過網上其它文章瞭解,這裡我想強調的是如何根據其取樣格式來從碼流中還原每個畫素點的YUV值,因為只有正確地還原了每個畫素點的YUV值,才能通過YUV與RGB的轉換公式提取出每個畫素點的RGB值,然後顯示出來。
用三個圖來直觀地表示採集的方式吧,以黑點表示取樣該畫素點的Y分量,以空心圓圈表示採用該畫素點的UV分量。
先記住下面這段話,以後提取每個畫素的YUV分量會用到。
- YUV 4:4:4取樣,每一個Y對應一組UV分量。
- YUV 4:2:2取樣,每兩個Y共用一組UV分量。
- YUV 4:2:0取樣,每四個Y共用一組UV分量。
2. 儲存方式
下面我用圖的形式給出常見的YUV碼流的儲存方式,並在儲存方式後面附有取樣每個畫素點的YUV資料的方法,其中,Cb、Cr的含義等同於U、V。
(1) YUVY 格式 (屬於YUV422)
YUYV為YUV422取樣的儲存格式中的一種,相鄰的兩個Y共用其相鄰的兩個Cb、Cr,分析,對於畫素點Y'00、Y'01 而言,其Cb、Cr的值均為 Cb00、Cr00,其他的畫素點的YUV取值依次類推。
(2) UYVY 格式 (屬於YUV422)
UYVY格式也是YUV422取樣的儲存格式中的一種,只不過與YUYV不同的是UV的排列順序不一樣而已,還原其每個畫素點的YUV值的方法與上面一樣。
(3) YUV422P(屬於YUV422)
YUV422P也屬於YUV422的一種,它是一種Plane模式,即打包模式,並不是將YUV資料交錯儲存,而是先存放所有的Y分量,然後儲存所有的U(Cb)分量,最後儲存所有的V(Cr)分量,如上圖所示。其每一個畫素點的YUV值提取方法也是遵循YUV422格式的最基本提取方法,即兩個Y共用一個UV。比如,對於畫素點Y'00、Y'01 而言,其Cb、Cr的值均為 Cb00、Cr00。
(4)YV12,YU12格式(屬於YUV420)
YU12和YV12屬於YUV420格式,也是一種Plane模式,將Y、U、V分量分別打包,依次儲存。其每一個畫素點的YUV資料提取遵循YUV420格式的提取方式,即4個Y分量共用一組UV。注意,上圖中,Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00,其他依次類推。
(5)NV12、NV21(屬於YUV420)
NV12和NV21屬於YUV420格式,是一種two-plane模式,即Y和UV分為兩個Plane,但是UV(CbCr)為交錯儲存,而不是分為三個plane。其提取方式與上一種類似,即Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00
3. 總結
幾種常見的YUV碼流格式就簡單地列在上面了,大家在處理YUV碼流前,先了解清楚自己的碼流到底屬於哪一種,然後對應進行處理。
最後,再回答一個疑問,即分析清楚YUV碼流格式了,我們可以做什麼?最常用的一點就是,提取出所有的Y分量,然後利用vc或者matlab把你採集的影象的灰度值(Y分量)顯示處理,這樣你就可以很快地知道你採集的影象是否有問題了。後面我將繼續寫一些文章講述如何提取、轉換、顯示這些YUV原始碼流,有興趣可以繼續關注,歡迎留言討論。
相關推薦
入門視訊採集與處理(學會分析YUV資料)
做視訊採集與處理,自然少不了要學會分析YUV資料。因為從採集的角度來說,一般的視訊採集晶片輸出的碼流一般都是YUV資料流的形式,而從視訊處理(例如H.264、MPEG視訊編解碼)的角度來說,也是在原始YUV碼流進行編碼
入門視訊採集與處理(學會分析YUV資料
做視訊採集與處理,自然少不了要學會分析YUV資料。因為從採集的角度來說,一般的視訊採集晶片輸出的碼流一般都是YUV資料流的形式,而從視訊處理(例如H.264、MPEG視訊編解碼)的角度來說,也是在原始YUV碼流進行編碼和解析,所以,瞭解如何分析YUV資料流對於做視訊領
V4L2視訊採集與H.264編碼原始碼大放送:Linux視訊採集與編碼(三)
這幾天的努力也算沒有白費,現在我將貢獻出我的成果,當然程式碼很大一部分都不是我寫的。 V4L2視訊採集我參考了V4L2官方原始碼,H.264編碼我使用了開源編碼庫x264,並參考了網上的一些例子。 但
可行動硬碟的寫入故障分析與處理(1)----硬碟的寫入保護的去除
警告:關閉可移動磁碟的寫入保護可能會引起磁碟內原本為資料的可修復損壞(windows自帶的修復軟體或者其他的修復軟體可修復)變為資料的永久性損壞(不可恢復),請慎重考慮是否關閉。 注1:如果不確定可移動磁碟的錯誤型別可以使用windows自帶的檢錯工具檢查(可以進行修復)。 注2:資料的損壞
監控視訊採集與Web直播開發全流程分析
內容概要: 攝像頭 => FFmpeg => Nginx伺服器 => 瀏覽器 從攝像頭拉取rtsp流 轉碼成rtmp流向推流伺服器寫入 利用html5播放 1.開發流程 1.1 通過FFmpeg視訊採集和轉碼 在音視訊處理領域,FFmpeg基本
基於VB 實時資料採集與處理的多執行緒設計
0 引言 在多種視覺化程式語言中,VB 具有介面設計功 能強的特點 ,選擇它作為開發平臺 ,可以快速地建立 應用程式。該特點使其在測控系統的資料採集和處 理中應用比較廣泛 ,但是在資料實時處理時 ,往往出 現執行操作介面的選單命令明顯反應變慢 ,操作不 便 ,實時監控資料時引發了程式阻塞。
教你高速入門Excel-巨集與VBA(續)
引言 通過上次的解說(教你高速入門(上))(教你高速入門(下))。相信一些簡單的問題大家已經能夠使用巨集和VBA來攻克了。那假設遇到大資料時怎麼辦?在日常生活中我們須要處理的可不止簡單的一兩張表,非常可能是20。30張表甚至
ROS2GO之慕課《機器人作業系統入門》配置與使用(2018-2019-2)
ROS2GO之慕課《機器人作業系統入門》配置與使用(2018-2019-2) icourse163中國大學MOOC《機器人作業系統入門》第二次開課! 開課時間: 2018年11月20日 ~ 2019年02月12日 學時安排: 1-3小時每週 預備知識  
光纖訊號採集與處理操作
&nb
Ubuntu下搭建Nginx伺服器+整合RTMP視訊直播流處理(邊做邊做更新)
簡介: 要求:做一個網頁獲取攝像頭的視訊流,然後將視訊流經過流伺服器推送到後臺視訊處理伺服器,再由後臺視訊處理伺服器推送到流伺服器,最終推送到頁面。如圖: 經過查閱資料,目前有red5以及nginx+nginx-rtmp-module實現,選擇第二種方式來實現。 準備工作:
[GIS教程] 6.1空間資料採集與處理具體步驟
資料採集 空間資料採集的方法 野外資料採集 平板測量:獲取的是非數字化資料 雖然現在已不是GIS野外資料獲取的主要手段,但由於它的成本低、技術容易掌握,少數部門和單位仍然在使用 全野外數字測圖 全野外空間資料採集與成圖分為三個階段:資料採集、資料處理、地圖資
[GIS教程] 6 空間資料採集與處理
在知識傳播途中,向涉及到的相關著作權人謹致謝意! 【GIS】整個地理資訊系統就是圍繞 空間資料的採集、處理、儲存、分析和表達而展開的 【空間資料採集與處理 的重要性】因此空間資料來源、採集手段、生成工藝、資料質量就直接影響到地理資訊系統應用的潛力、成本和效
C++ 異常捕捉與處理(try...catch...)
首先舉一個異常處理的例子: string str = "0123456789"; char ch1 = str[100]; //陣列越界,但是不提醒,程式執行立即崩潰 cout << ch1 << endl; &n
開始認真的學習視訊編碼與處理技術
自從到新浪微博一來,一直從事視訊後臺伺服器的轉碼相關的工作,之前做JavaEE系統級的需求多一些,從現在開始重點是轉碼與質量提升的工作了,視訊編碼和處理之前零零散散接觸了一些,現在開始要認真學習,認真整
Android的事件分發(dispatchTouchEvent),攔截(onInterceptTouchEvent)與處理(onTouchEvent)
在Android中,View的結構是樹狀的,所以,當觸發觸控事件的時候,其事件傳遞也是從上之下一層層的傳遞。下面我們結合例子來一點點進行分析。 首先,我們需要了解事件處理中的幾個方法: 1、在ViewGroup中,事件分為dispatchTouchEvent(事件的分發)
知識圖譜入門——知識抽取與挖掘(I)
文章首發於部落格du_ok’s Notes,本文連結為知識圖譜入門——知識抽取與挖掘(I) 本文主要介紹了面向非結構化資料、半結構化資料和結構化資料的知識抽取。 知識抽取任務定義 對於知識圖譜來說,我們需要從不同來源、不同結構的資料中進行抽取,形成知
視訊採集與運動檢測原始碼
#include <stdio.h> #include <cv.h> #include <cxcore.h> #include <highgui.h> int main( int argc, char** argv ) { //宣告IplImage指標
C#FFmpeg視訊採集與推送RTMP伺服器程式碼思路整理
C#視訊採集與推送RTMP伺服器程式碼思路整理:在看過FFmpeg後是否認為寫C#的視訊流採集和推送還是一頭霧水啊?深有此感。領導是C#的高手,說可以通過C或C++的程式碼直接複製貼上到C#工程然後進行適配程式碼就可以了,因為C#使用ffmpeg的類名和變數、方法等都與C保持
視訊錄製與播放(豎屏)旋轉90度問題
// 設定橫屏顯示// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 選擇支援半透明模式,在有surfaceview的activity中使用。getWindow().setForm
python-關於None,NaN , 空字元的比較與處理(1)
【問題描述】在python中經常會遇到這三個特殊值情況。尤其是匯入資料檔案時,就會遇到這種問題(如csv檔案、資料庫資料等),這些型別的資料在函式中使用需要十分小心。下面對該型別資料進行分析。【型別分析】from numpy import NaN from pandas im