Re: [問題] 用C++處理YUV檔案

看板C_and_CPP作者 (AM2)時間13年前 (2012/03/27 12:52), 編輯推噓0(003)
留言3則, 3人參與, 最新討論串2/2 (看更多)
我接觸過的YUV檔案內容就只是每個pixel的YUV值而已 也就是說,檔案內沒有儲存"這個圖片長寬是多少"、"每個pixel是幾bit"、"padding?" 甚至連"這個檔案是使用哪種YUV格式儲存的(如YUV420)"都不包含 假如你手上的檔案符合我上述所說,請你往下看 如果到這裡為止你看不懂我在說什麼(我估計是這樣),請先去看wiki的YUV 看你敘述的方式應該是對YUV很不熟,強烈建議先弄懂各種YUV格式...... 第一步就是要知道畫面的的長寬和補足pitch的padding(假如有的話) 假如你能從TA那裏得到資訊那最好,直接接下一步 要自己直接從檔案猜出畫面的格式,可以用檔案大小來輔助 在沒有padding的情況下,檔案大小的byte數很可能是pixel數的整數倍或半整數倍, 你把這個byte數做因數分解,看看能不能對應到各種常見的解析度 如:640*480、800*600、1024*768、1440*900、1650*1080、19201080...... 請自己評估猜測可能的大小 如果是8-bit灰階圖那檔案大小byte數應該剛好等於解析度乘積 如果是8-bit YUV420那應該byte數應該等於解析度乘積的1.5倍 你可以上網找一個軟體叫做YUV PLAYER數入各參數嘗試開啟這個YUV檔案 有看到圖且檔案大小和格式對應正確就bingo了 第一步另一種做法 找個能看hex的軟體,如notepad++,開啟這個YUV檔 觀察裡面儲存的方式,應該很有機會看出是否是plane擺放的YUV格式 至少可以把要猜測的範圍縮限在YUYV類或plane類 如果你覺得這個第一步真的很困難, 你可以考慮去估狗能自動猜測格式開啟圖片的強力軟體 先看到影像然後看看這個軟體能不能告訴你他的格式 這種軟體不好找(我資質駑鈍找不到) 如果你找到了這種軟體,請回個信給我讓我知道,謝謝 第二步,假設你已經有了YUV格式和畫面尺寸, 直接依據格式讀檔用fread之類把對應的byte存進你開好的陣列就好了 各種YUV格式把pixel資訊放在記憶體中的擺放方法不同,請wiki ※ 引述《CCT63 (CCT)》之銘言: : 這是我這學期修課的一門作業 : 要把TA給的YUV檔案做編碼 : 我現在最主要的問題是在 : 我開啟我要求的YUV file之後 : 由於不知道yuv他裡頭的格式長什麼樣子 : 所以我不知道怎麼用矩陣之類的來存取 : 所以想來這邊請問一下有沒有高手知道 : 怎麼對YUV檔做一開始的處理(格式如何? 該怎樣適當地存入矩陣?) : 謝謝 -- 話說沒拿到YUV檔空口打嘴砲我還真不知道能怎麼幫你 你要不要試著把YUV檔分享出來看有沒人願意幫你看 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.25.86

03/27 13:08, , 1F
我有拿到yuv檔啦 可是不知道怎麼去開啟和了解裡頭的資訊
03/27 13:08, 1F

03/27 14:04, , 2F
用二進制開
03/27 14:04, 2F

03/27 15:52, , 3F
應該有header 先解析header吧
03/27 15:52, 3F
文章代碼(AID): #1FSKUf_s (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1FSKUf_s (C_and_CPP)