opencv與ffmpeg數據結構

       最近在做視頻濃縮的項目。以前一直用opencv這項神器輔助編程,然而發現opencv在視頻的壓縮編碼和寫入封裝上有些弊端和小bug。比如壓縮比很小,無法寫入生成過大的文件,格式封裝不完美。所以在下又去尋求另一個開源庫ffmpeg的幫助。

       講道理,ffmpeg比opencv學起來更費勁。版本更新換代太快,網上也沒用成體系的教程資料,所以只有去大嬸們的博客去取經,溜了幾圈受益匪淺。不得不說這個庫很厲害,有完整的視頻編解碼方案,解決了之前生成的視頻文件太大的問題。

       由於用到了opencv封裝的一些算法,所以我對每一幀圖像使用的是opencv的Mat數據結構。然而ffmpeg編碼視頻要求輸入是YUV,那麼問題來了,我怎麼把這兩個庫數據結構對接上?查找了一些資料,不管你是什麼數據結構,都得從像素級別處理圖像,所以可以從內存地址下功夫。下面是我的代碼

memcpy(pYuvBuf, Img.data, bufLen*sizeof(unsigned char));
pict->data[0] = pYuvBuf;              // Y  
pict->data[1] = pYuvBuf + y_size;      // U   
pict->data[2] = pYuvBuf + y_size * 5 / 4;  // V 

其中Img爲Mat結構。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章