2012-04-04 102 views
0

我正在爲iOS的圖像處理應用程序工作,並且我的應用程序的各個階段之一是基於矢量的圖像拼版/顏色檢測。現在,我已經編寫了代碼,可以按像素來確定分色的顏色,但是如果iOS處理器處理圖像中的每個像素,我認爲對於處理器來說都是非常困難的。因此,我想知道是否可以使用圖形處理器。iOS CGImageRef像素着色器

我想創建一種「像素着色器」,它使用OpenGL-ES或其他渲染技術快速處理和張貼圖像。我不知道從哪裏開始(我已經爲Unity3D編寫了簡單着色器,但從未爲它們編寫底層編程)。

任何人都可以指向正確的方向嗎?

回答

2

我打算來這邊,並建議您試試Brad Larson的GPUImage framework,它將自己描述爲「BSD授權的iOS庫,可讓您將GPU加速的濾鏡和其他效果應用於圖像,實時相機視頻,和電影「。我沒有使用它,並假設你需要做一些GL閱讀來添加你自己的過濾器,但它會處理很多樣板文件,並提供了很多預先打包的過濾器,所以它絕對值得研究。這聽起來不像你對OpenGL特別感興趣,所以沒有真正的理由去研究它。

我會加上一個唯一的考慮,即在iOS 4下,我發現在CPU上工作的速度通常比在GPU上快得多(我使用GCD在覈心之間分配),而我需要能夠讀取結果結束任何類型的串行訪問。這是因爲OpenGL通常被設計爲可以上傳圖像,然後將其轉換爲任何想要的格式,並且如果您想讀取它,則會將其轉換回您希望接收的格式並將其複製到其中你想要它。所以你在GPU上保存的是你所支付的,因爲GL驅動程序必須分流和重新安排內存。從iOS 5開始,Apple推出了一種特殊的機制,可以讓您直接訪問OpenGL的紋理存儲庫,這可能不再成爲問題。

+2

在某些時候,我需要基準處理時間交叉點作爲輸入數據大小的函數,特別是如果考慮加速作爲並行化CPU上的某些操作的手段。我認爲我在iOS 4.0上處理來自GPU上的CGImage或UIImage的640x480幀與優化的CPU綁定功能的整體勝利,但我需要爲此生成一些硬編碼。單獨轉換到Core Graphics類型和單獨轉換比紋理上傳慢得多,所以這對我來說更是一個瓶頸。 – 2012-04-05 17:40:20

+0

我的CPU例程永遠不會達到Core Graphics;它們用於實時相機輸入,因此可直接在相機返回的'CVPixelBuffer'上操作。我在上一次WWDC巡迴賽中與Alan Schaffer進行了一次快速問答,他似乎承認,雖然iOS 5的面部檢測需要GPU合作,但由於來回成本的原因,沒有公共API適合重新實現。當時我並沒有意識到新的核心視頻相關機制,它可以有效地爲您提供直接的紋理內存訪問,因此未對其進行討論。 – Tommy 2012-04-05 18:59:29

+0

是的,直接使用OpenGL ES中的相機幀可以比任何CPU綁定的速度快得多。爲了在640x480圖像上進行簡單的棕褐色調調整,我可以在iPhone 4(2.5 ms,帶有iOS 5.0紋理緩存)的情況下以6 ms的速度從捕捉到顯示,CPU上的任何內容都不會靠近。就面部檢測而言,完全基於GPU的OpenGL ES 2.0實現非常有趣:http://fileadmin.cs.lth.se/graphics/theses/projects/facerecognition/。在某些時候,我想嘗試一下。 – 2012-04-05 19:34:01