初学音视频(一)-RGB和YUV格式分析
生活随笔
收集整理的這篇文章主要介紹了
初学音视频(一)-RGB和YUV格式分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
- 有幸能夠看到雷霄驊先生的博客,很感謝雷神能夠這么無私把知識分享出來,對我這種新手的幫助實在是太大了。希望到另一個世界雷神不用再這么辛苦的。
- 本篇文章基本全是參考雷神的:視音頻數據處理入門:RGB、YUV像素數據處理
- 學完這篇文章,任務本篇文章的核心就是YUV和RGB這種顏色編碼在內存中是如何存儲的,像BMP(或者JPG)封裝格格式到底是什么東西的。
- 本篇文章是在C語言的基礎上寫的,因為我是做android的,最近才學了一點C語言基礎的,剛好派上用場了。
- 需要的YUV,RGB等格式的查看工具:雷神分享了 這些工具和源文件 。在這些工具中一個叫:yuvplayer.exe的程序是可以查看YUV格式的內容的
實際操作
1.分離YUV420P像素數據中的Y、U、V分量
- 代碼如下:
- 這個小點要了解YUV在內存中的存放方式,這個本身這個圖片是420P的圖片,420P的圖片是4個Y對應一對UV,那么內存大小就是 寬度 * 高度(YYYY) + 寬度 * 高度/2(UV),這是數據量,在內存中的儲存方式是YYYYYYYY….UU.VV.,這個的….是指前 寬 * 高 的byte中存儲的全是YYYY的信息,然后才有UUUUUUUU…,把U存儲完后才會存儲VVVVVVV… 。
總結不下去了 簡單的把重點的知識勾勒一下,明天繼續
分離YUV420P像素數據中的Y、U、V分量和分離YUV444P像素數據中的Y、U、V分量這兩個分割中
- 要了解420P和444P在內存中的存儲方式,這個P代表了Planar這種存儲方式,仔細看:http://blog.csdn.net/tkp2014/article/details/42110885。像素的采樣位數一律為8bit這個概念還沒弄清楚
- 軟件查看YUV Y這種后綴文件的時候要轉換格式和固定分辨率
- 這里注意 YUV在內存中的存儲格式和YUV本身的排列格式是兩個概念。
將YUV420P像素數據去掉顏色(變成灰度圖) 、將YUV420P像素數據的亮度減半
- 這里要注意 為什么設置unsigned char *p來定義 把-128-127 轉換成0-255 這樣容易減半
- 這里注意數據對 顏色 和亮度的影響是如何造成的
將YUV420P像素數據的周圍加上邊框
加深對YUV420P這種存儲方式的理解,可以用方形框框來描述這種存儲方式的
生成YUV420P格式的灰階測試圖
一個算法而已
計算兩個YUV420P像素數據的PSNR
- PSNR的概念,注意計算的方式就OK
- 我的取值一個是26 左右的, 還有我用U還是V的數據 進行比較的時候 數據是36
分離RGB24像素數據中的R、G、B分量
- 弄清楚RGB24這種圖像在內存中的存儲方式的
將RGB24格式像素數據封裝為BMP圖像
- bmp分裝的格式 兩個頭里面都包括什么東西,目前還沒有測試成功
將RGB24格式像素數據轉換為YUV420P格式像素數據
- 這種轉換的格式要記住
- 核心:
- 從源代碼可以看出,本程序實現了RGB到YUV的轉換公式:
Y= 0.299*R+0.587*G+0.114*B
U=-0.147*R-0.289*G+0.463*B
V= 0.615*R-0.515*G-0.100*B
要注意的地方
1) RGB24存儲方式是Packed,YUV420P存儲方式是Plander。
2) U,V在水平和垂直方向的取樣數是Y的一半
生成RGB24格式的彩條(算法注意一下)
總結
以上是生活随笔為你收集整理的初学音视频(一)-RGB和YUV格式分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三星970PRO用于高速采集存储系统
- 下一篇: 2022年的电视评判标准,为何还要强调画