我最初考虑使用CoreImage来解决这个问题(因为我还需要进行面部识别),但很明显,iPhone上还没有包含CI失真滤镜。
我试图深入研究GLImageProcessing,CImg和ImageMagick,虽然我在找到学习其中任何一个的起点时遇到了很多麻烦。
鉴于那里的应用程序数量会导致图像失真,我知道这不会非常困难。
我不懂C或C ++,除非绝对必要,否则没有时间学习这些语言。如果其中一个库是处理此任务的权威库,那将是必要的。
有没有人有这些库的经验?
那里有专门针对iOS5的书吗?
资源我发现:
GLImageProcessing示例项目 https://developer.apple.com/library/ios/#samplecode/GLImageProcessing/Introduction/Intro.html
ImageMagick& MagickWand http://www.imagemagick.org/script/magick-wand.php
简单的iPhone图像处理 http://code.google.com/p/simple-iphone-image-processing/
答案 0 :(得分:14)
正如你所说,Core Image的当前功能在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);
}
这会对视频流产生这种影响:
在我的基准测试中,GPUImage处理图像的速度比iPhone 4上的Core Image快4倍(比CPU绑定处理快6倍),视频比Core Image快25倍(比CPU快70倍)。即使在最糟糕的情况下,我也可以投入它,它与Core Image的处理速度相匹配。
该框架仍然相当新,所以我现在在那里的库存过滤器数量很少,但我会很快添加一堆。在此期间,您可以编写自己的自定义失真着色器来处理图像,并且可以根据需要调整所有内容的源代码。 My introductory post about it详细介绍了如何在您的应用程序中使用它。