2012-02-16 111 views
3

我最初在考慮CoreImage時考慮到了這個問題(因爲我也需要做面部識別),但不幸的是,不幸的是,CI失真濾鏡還沒有包含在iPhone中。iOS圖像處理(失真)

我試圖潛入GLImageProcessing,CImg和ImageMagick,儘管我很難找到學習任何這些東西的起點。

鑑於應用程序的數量,圖像失真,我知道這不是非常困難。

我不知道C或C++,沒有時間學習這些語言,除非絕對必要。如果其中一個圖書館是處理這一任務的權威圖書館,將是必要的。

有沒有人有任何這些庫的經驗?

那裏的任何書籍都專門針對iOS5?

資源,我發現:

+1

我之前使用過ImageMagick,並且對於我們的OS X產品而言,它的構建「恰到好處」有點麻煩,但最終它是值得的。可惜我不再有這個makefile,所以我不能給你。 – 2012-02-16 22:00:58

+1

如果你想使用其中一個庫,你將不得不花時間去學習它所寫的語言,也許我不明白你的問題。 – 2012-02-16 22:28:28

+0

謝謝你的答案,只是不是我想聽到的:(愚蠢的蘋果沒有那些過濾器提供給開發者! – 2012-02-17 03:23:40

回答

13

正如你所說,核心圖像的當前功能是iOS上的一點點有限的。特別是,在桌面上找不到類似自定義內核的內容令人失望。您列出的其他替代方案(除了GLImageProcessing,無法進行此類過濾)都是CPU綁定的庫,對於在移動設備上進行實時篩選會太慢。

但是,我可以指出一個名爲GPUImage的開源框架,我只是推出了這個框架,因爲我找不到可以讓您取消自定義效果的東西。正如其名稱所示,GPUImage使用OpenGL ES 2.0着色器對靜止圖像和視頻進行GPU加速處理。您可以使用這些編寫自己的自定義效果,因此您應該可以做任何你能想到的事情。框架本身是Objective-C,並且有一個相當簡單的界面。

作爲失真濾波器,以下着色器(基於Danny Pflughoeft's answer代碼)的示例做了排序的魚眼效果:

varying highp vec2 textureCoordinate; 
uniform sampler2D inputImageTexture; 

const mediump float bulgeFactor = 0.5; 

void main() 
{ 
    mediump vec2 processedTextureCoordinate = textureCoordinate - vec2(0.5); 
    mediump float radius = processedTextureCoordinate.x * processedTextureCoordinate.x + processedTextureCoordinate.y * processedTextureCoordinate.y; 
    mediump vec2 distortedCoordinate = vec2(pow(radius, bulgeFactor)) * processedTextureCoordinate + vec2(0.5); 

    gl_FragColor = texture2D(inputImageTexture, distortedCoordinate); 
} 

這產生這種效果上的視頻流:

Fisheye effect filter

以我的基準,比GPUImage核心圖片(70X比CPU更快的)更快的處理圖像4X速度比在iPhone 4核心圖片(6X快於CPU綁定處理)和視頻25X。即使在最糟糕的情況下,我也可以拋棄它,它與Core Image的處理速度相匹配。

這個框架還是相當新的,所以我現在在那裏的庫存過濾器數量很少,但我會盡快加入一堆。與此同時,您可以編寫自己的自定義失真着色器來處理圖像,並且可以根據需要調整所有內容的源代碼。 My introductory post about it有關如何在您的應用程序中使用它的更多細節。

+0

非常酷的東西布拉德!我們可以做你的着色器和你的框架圖像堆肥? – 2012-02-17 21:12:48

+0

@JeshuaLacock - 還沒有,我需要在過濾器上添加一個小的擴展名,以便他們可以一次接受多個圖像。我的重點是讓所有單幅圖像過濾器首先正常工作,但是我會看看是否可以快速實現合成的東西 – 2012-02-17 21:20:57

+0

不錯!有一個地方我可以保持眼睛的東西,或者我應該定期檢查你的GIT嗎?另外,我真的對這種效果相反的着色器感興趣(在中間較小,我應該發表一個新的問題嗎? – 2012-02-17 21:35:17