iOS图像处理(扭曲)

5

我最初考虑使用CoreImage来解决这个问题(因为我还需要进行人脸识别),但是后来发现,遗憾的是,在iPhone上尚未包括CI Distortion滤镜。

我试图深入研究GLImageProcessing、CImg和ImageMagick,但是我很难找到学习这些内容的起点。

考虑到市面上有很多应用程序都可以进行图像扭曲,我知道这不可能特别困难。

我不会C或C++,除非绝对必要,否则我没有时间学习这些语言。如果其中一个库是处理此任务的权威库,则必须学习这些语言。

有没有人有这些库的经验?

有没有针对iOS5的相关书籍?

我找到的资源:


1
我以前用过ImageMagick,为我们的OS X产品构建它是有点麻烦的,但最终它是值得的。可惜我现在没有那个makefile,所以无法提供给你。 - Paul Cezanne
1
如果你想使用其中一个库,那么你需要花时间学习它所编写的语言。也许我没有理解你的问题。 - rob mayoff
谢谢大家的回答,只是不是我想听到的 :( 真是愚蠢的苹果,竟然还没有为开发者提供这些过滤器! - Matisse VerDuyn
1个回答

15
正如你所说,目前iOS上的Core Image功能有些受限。特别是缺乏像桌面端一样的自定义内核令人失望。你列出的其他替代方案(除了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 在 iPhone 4 上处理图像的速度比 Core Image 快4倍(比 CPU 绑定处理快6倍),处理视频的速度比 Core Image 快25倍(比 CPU 快70倍)。即使在最坏的情况下,它的处理速度也与 Core Image 相当。
该框架仍然相对较新,因此我现在拥有的库存滤镜数量很少,但我很快就会添加更多。同时,您可以编写自己的自定义失真着色器来处理图像,并且所有内容的源代码都可以根据需要进行调整。我的介绍性文章中有关于如何在您的应用程序中使用它的更多详细信息。

很棒的东西 Brad!我们可以在你的着色器和框架中进行图像合成吗? - Jeshua Lacock
@JeshuaLacock - 还没有。我需要为过滤器添加一个小扩展,使它们可以同时接受多个图像。我一开始专注于让所有单图像过滤器正常工作,但我会看看能否快速实现一些合成的东西。 - Brad Larson
不错!有没有地方可以让我关注这些东西,或者我应该定期检查你的GIT?另外,我对一个具有相反效果的着色器非常感兴趣(中间更小,边缘更大)。我应该发一个新问题吗? - Jeshua Lacock
@JeshuaLacock - 观察 GitHub 存储库可能是了解新添加的最佳方法。我有时也会在 Twitter 上提到这方面的内容:https://twitter.com/#!/bradlarson。至于挤压效果,将 bulgeFactor 更改为-0.1 可以产生有趣的收缩效果,但总体上看起来不太对。我相信你可以在其他地方找到更清晰的着色器实现。 - Brad Larson
1
@JeshuaLacock - 最新消息,我现在已经添加了图像混合功能,并开始添加混合模式滤镜。 - Brad Larson
这是一个非常完整的库。你有边缘检测 - canny和sobel,你有模糊,甚至高斯模糊,线检测,局部自适应滤波,甚至还有另一个OpenCV没有的功能。此外还有腐蚀和膨胀。 - Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接