2012-02-16 100 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