【问题标题】:iOS Image Manipulation (Distortion)iOS 图像处理(失真)
【发布时间】:2013-07-01 18:45:17
【问题描述】:

我最初考虑 CoreImage 来处理这个问题(因为我还需要进行面部识别),但我意识到,不幸的是,iPhone 上还没有包含 CI 失真过滤器。

我尝试深入研究 GLImageProcessing、CImg 和 ImageMagick,尽管我在寻找学习其中任何一个起点时遇到了很多麻烦。

鉴于存在图像失真的应用程序数量众多,我知道这不会非常困难。

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

有没有人使用过这些库?

有专门针对 iOS5 的书籍吗?

我找到的资源:

【问题讨论】:

  • 我以前使用过 ImageMagick,但要为我们的 OS X 产品“恰到好处”地构建它有点麻烦,但最终还是值得的。遗憾的是,我不再拥有那个 makefile,所以我不能把它给你。
  • 如果你想使用其中一个库,你将不得不花时间学习它所用的语言。也许我不明白你的问题。
  • 感谢大家的回答,只是我不想听到的东西 :( 愚蠢的苹果还没有为开发人员提供这些过滤器!

标签: objective-c ios image-processing core-image distortion


【解决方案1】:

正如您所说,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 有更多关于如何在您的应用程序中使用它的详细信息。

【讨论】:

  • 非常酷的东西布拉德!我们可以使用您的着色器和框架进行图像堆肥吗?
  • @JeshuaLacock - 还没有。我需要为过滤器添加一个小扩展,以便它们一次可以接受多个图像。我专注于首先让所有单图像过滤器正常工作,但我会看看我是否可以快速实现一些用于合成的东西。
  • 不错!有什么地方可以让我密切关注东西,还是我应该定期检查你的 GIT?此外,我对具有与此效果相反的着色器非常感兴趣(中间更小,边缘更大)。我应该发布一个新问题吗?
  • @JeshuaLacock - 观看 GitHub 存储库可能是了解新增内容的最佳地点。我偶尔也会在 Twitter 上提及这方面的内容:twitter.com/#!/bradlarson。就收缩效应而言,将 bulgeFactor 更改为 -0.1 会产生有趣的收缩,但总体上看起来不太正确。我敢肯定有一个更干净的着色器实现,你可以在某个地方找到。
  • @JeshuaLacock - 作为更新,我现在添加了图像混合功能,并开始添加混合模式过滤器。
猜你喜欢
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 2016-12-22
相关资源
最近更新 更多