1. 程式人生 > >分享幾個Android攝像頭採集的YUV資料旋轉與映象翻轉的方法

分享幾個Android攝像頭採集的YUV資料旋轉與映象翻轉的方法

最近在做直播推流方面的工作,因為需要新增美白,濾鏡,AR貼圖等效果。所以不能簡單的使用SufaceView加Camera的方式進行資料的採集,而是需要對Camera採集到的YUV資料進行相關的處理之後然後再進行推流的操作,YUV資料的返回介面。


@Override 
public void onPreviewFrame(byte[] data, Camera camera) { 



  當然,美白,濾鏡,AR貼圖等效果採用的是第三方的SDK了。除此之外,因為Android攝像頭採集的資料都是有一定的旋轉的。一般前置攝像頭有270度的旋轉,後置攝像頭有90的旋轉。所以要對YUV資料進行一定旋轉操作,同時對於前置攝像頭的資料還要進行映象翻轉的操作。網上一般比較多的演算法是關於旋轉的


private byte[] rotateYUVDegree90(byte[] data, int imageWidth, int imageHeight) { 
byte[] yuv = new byte[imageWidth * imageHeight * 3 / 2]; 
// Rotate the Y luma 
int i = 0; 
for (int x = 0; x < imageWidth; x++) { 
for (int y = imageHeight - 1; y >= 0; y--) { 
yuv[i] = data[y * imageWidth + x]; 
i++; 


// Rotate the U and V color components 

i = imageWidth * imageHeight * 3 / 2 - 1; 
for (int x = imageWidth - 1; x > 0; x = x - 2) { 
for (int y = 0; y < imageHeight / 2; y++) { 
yuv[i] = data[(imageWidth * imageHeight) + (y * imageWidth) + x]; 
i--; 
yuv[i] = data[(imageWidth * imageHeight) + (y * imageWidth) + (x - 1)]; 
i--; 


return yuv; 



private byte[] rotateYUVDegree270(byte[] data, int imageWidth, int imageHeight) { 
byte[] yuv = new byte[imageWidth * imageHeight * 3 / 2]; 
// Rotate the Y luma 
int i = 0; 
for (int x = imageWidth - 1; x >= 0; x--) { 
for (int y = 0; y < imageHeight; y++) { 
yuv[i] = data[y * imageWidth + x]; 
i++; 

}// Rotate the U and V color components 
i = imageWidth * imageHeight; 
for (int x = imageWidth - 1; x > 0; x = x - 2) { 
for (int y = 0; y < imageHeight / 2; y++) { 
yuv[i] = data[(imageWidth * imageHeight) + (y * imageWidth) + (x - 1)]; 
i++; 
yuv[i] = data[(imageWidth * imageHeight) + (y * imageWidth) + x]; 
i++; 


return yuv; 


  上述兩個演算法分別用於90度旋轉(後置攝像頭)和270度旋轉(前置攝像頭),但是對於前置攝像頭的YUV資料是需要映象的,參照上面的演算法,實現了前置攝像頭的映象演算法。


private byte[] rotateYUVDegree270AndMirror(byte[] data, int imageWidth, int imageHeight) { 
byte[] yuv = new byte[imageWidth * imageHeight * 3 / 2]; 
// Rotate and mirror the Y luma 
int i = 0; 
int maxY = 0; 
for (int x = imageWidth - 1; x >= 0; x--) { 
maxY = imageWidth * (imageHeight - 1) + x * 2; 
for (int y = 0; y < imageHeight; y++) { 
yuv[i] = data[maxY - (y * imageWidth + x)]; 
i++; 


// Rotate and mirror the U and V color components 
int uvSize = imageWidth * imageHeight; 
i = uvSize; 
int maxUV = 0; 
for (int x = imageWidth - 1; x > 0; x = x - 2) { 
maxUV = imageWidth * (imageHeight / 2 - 1) + x * 2 + uvSize; 
for (int y = 0; y < imageHeight / 2; y++) { 
yuv[i] = data[maxUV - 2 - (y * imageWidth + x - 1)]; 
i++; 
yuv[i] = data[maxUV - (y * imageWidth + x)]; 
i++; 


return yuv; 


  至於更多關於YUV和推流的知識,目前我還不是很瞭解。這篇文章也主要是分享這三個演算法。

相關推薦

分享Android攝像頭採集YUV資料旋轉映象翻轉方法

最近在做直播推流方面的工作,因為需要新增美白,濾鏡,AR貼圖等效果。所以不能簡單的使用SufaceView加Camera的方式進行資料的採集,而是需要對Camera採集到的YUV資料進行相關的處理之後然後再進行推流的操作,YUV資料的返回介面。@Override public

分享開源的android專案的原始碼,基本上用androidstudio都可以編譯成功

轉自:http://blog.csdn.net/liuqz2009/article/details/53507472 Android開源專案有很多,但是完整的app專案不多,下面是最近我從 jcodecraeer網站 整理的一些開源app專案: 注: jcodecr

Android攝像頭採集的視訊資料流如何通過Socket實時傳送到目標服務端

分兩塊: 1.取得攝像頭採集的視訊流 2.傳送到伺服器端 protected MediaRecorder mMediaRecorder; private LocalServerSocket mLss = null; private LocalSock

分享STM32開發板的光碟資料

火牛開發板光碟.rarhttp://115.com/file/bhq61xsq#ALIENTEK開發板光碟.rarhttp://115.com/file/e6d3cog0#LandTiger路虎開發板光碟-CD.rar 原子教你玩STM32

分享能用的editplus 註冊碼

地址 sky edit 使用 editplus soft -c host edi 分享幾個能用的editplus 註冊碼原文:http://host.zzidc.com/wljc/1286.html 註冊名:host1991 序列號:14F50-CD5C8-E1

分享學習前端的網站

clas pos 分享 教程 pan 文檔 doc run bsp 1.關註前端開發,關註用戶體驗 2.源於開發者,服務開發者 3.菜鳥教程 4.印記中文,唯一與官方文檔同步的中文文檔分享幾個學習前端的網站

從事多年大數據,給大家分享學習方法

大數據 大數據學習 大數據開發 編程語言 曾從事軟件開發和培訓9年。參與多個大型項目開發,涉及c++,Java,Python,大數據,數據科學,人工智能等多個領域。熟悉多個領域中軟件開發流程及軟件架構。曾在大型IT公司任程序員,項目經理,高級講師,教學負責人。現在是一名線上培訓機構的講師,看到

[API 開發管理] 分享 eoLinker 實用操作技巧

導出pdf 請求參數 項目文件 lin 本地 方便 tro 批量導入 oracl 一鍵離線導出項目,PDF、WORD等格式任你挑選 舉例說明,如果我要將 “示例素材項目” 導出到本地,並且以 PDF 的格式保存。 首先找到該項目所在空間:演示空間,在左邊一級菜單中選擇 “

分享實用的PDF美化技巧

https 需要 字體 center 生活 我們 edi 根據 體驗 最近杭州又火了!杭州的一男子因為PPT做的太醜被公司開除,引發網友熱議,大家在對他做的“PPT究竟有多醜”產生好奇的同時,也針對辦公類文件美化是否重要這一點進行激烈的爭議和吐槽。 其實不光是PPT,我們

分享Python小技巧函式裡的4小花招

前面講了很多內容都是關於python的變數,資料結構,下面我們來談一談python的函式。python裡的函式知識點大概分為基礎的定義使用,作用域和引數傳遞,高階用法,其中引數傳遞最為靈活,作用域最為繞人. 函式其實是對程式邏輯進行結構化或者過程化的一種程式設計方法,把整塊的程式碼巧妙的隔離成易於管理的小塊

分享Python小技巧函式裡的4小花招!

  前面講了很多內容都是關於python的變數,資料結構,下面我們來談一談python的函式。python裡的函式知識點大概分為 基礎的定義使用 , 作用域 和 引數傳遞 , 高階用法 ,其中引數傳遞

分享提升審美的前端UI框架!

十個前端UI優秀框架 自己最近也在看,也在學^_^ 最近需要一些前端框架,於是在網上整理了一些感覺不錯的前端框架,有pc端和移動端,為了方便日後自己先記錄下來了... Bootstrap 首先說 Bootstrap,估計你也猜到會先說或者一定會有這個( 呵呵了 ),這是說明它的強大之

分享做手機端的外掛

最近做了一個手機端的專案,然後找了幾個外掛來使用,使用過程中也發現了一些好用的外掛。在這裡給大家分享一下,希望能有幫助! 1——mint-ui  :http://mint-ui.github.io/#!/zh-cn 剛開始使用的是這個外掛,因為好多人都說好用,網上也評論挺多的。但是

情人節分享不錯的娛樂工具

一、各大視訊網站去除VIP、廣告外掛 vip看看: http://vip.72du.com/?f=vipbar2#help 二、全網音訊搜尋、下載 瘋狂音樂搜尋: http://music.ifkdy.com/ 比如,我從QQ音樂中,搜尋 追夢赤子心,得到如下結果:

分享下載免費電子圖書的地方ebook

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

分享vscode的外掛

外觀: 1- An Old Hope Theme (設定編輯器主題) 2-Material Icon Theme (設定編輯器圖示) 上面兩個外掛使用辦法如圖: 程式碼管理 Prettier (格式化話程式碼) 在這裡透露一個小技巧,當代

分享能在大學賺錢的案例

轉載自本人微信公眾號,歡迎掃碼關注! 上次分享了一位朋友大學期間的賺錢經歷,許多人看完之後都特別佩服,其中也包括我。其實在大學能夠鍛鍊自己的機會有很多,有的同學參加了學生會和各種社團,也有的同學參加各種比賽來豐富自己的簡歷,還有的同學則是在業餘時間做各種兼職來鍛鍊

分享最簡單的bat指令碼的例子

兩個小時後自動關機 echo off shutdown /s /t 7200 進入C盤一個資料夾執行一個程式,接收使用者兩個輸入,一個是百度文庫某一個文件的連結,一個是該文件的型別,然後根據該程式執行的規則:FreeForWenku.exe + URL + 型

分享平時用到的免費圖床網站

對於那些個人搭建的小圖床站點,我還是很介意的,因為本身你決定使用圖床就是為了能夠保障你所需要顯示的圖片能夠穩定可靠的一直存在,而非莫名其妙的又成了撕裂logo。因此,尋找一個有口碑不會輕易跑路的圖床網站也是很有必要的。 下邊就分享幾個此類較為靠譜的網站,給各位PM大佬。 站點: 【支援免註冊上傳

漲知識:分享值得推薦的導航網站

平時我們上網時,如果想要快速查尋資訊,設定一個導航網站作為主頁很有必要,因為直接使用搜索引擎搜尋前幾條基本都是廣告,還要從中篩選,而設定一個好用的導航網站會讓你事半功倍。網路上也有很多導航網站,比如某某123,某某60等等,但是小編在使用後發現這些導航網站體驗