gpt4 book ai didi

objective-c - iOS 图像处理(失真)

转载 作者:可可西里 更新时间:2023-11-01 04:11:43 27 4
gpt4 key购买 nike

我最初是在考虑 CoreImage 的情况下解决这个问题的(因为我还需要进行面部识别),但我意识到,不幸的是,CI 失真滤镜尚未包含在 iPhone 中。

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

考虑到存在图像失真的应用数量,我知道这不会非常困难。

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

有人使用过这些库吗?

有没有专门介绍 iOS5 的书籍?

我找到的资源:

最佳答案

正如您所说,Core Image 目前的功能在 iOS 上有点受限。尤其是缺少您在桌面上找到的自定义内核,这令人失望。您列出的其他替代方案(GLImageProcessing 除外,它无法进行这种过滤)都是 CPU 绑定(bind)库,并且对于在移动设备上进行实时过滤来说太慢了。

但是,我可以为您指出一个名为 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 绑定(bind)处理快 6 倍),视频处理速度比 Core Image 快 25 倍(比在 CPU 上快 70 倍)。即使在我能想到的最坏情况下,它的处理速度也能与 Core Image 匹敌。

框架仍然相当新,所以我现在拥有的库存过滤器数量很少,但我很快就会添加更多。同时,您可以编写自己的自定义失真着色器来处理您的图像,并且所有内容的源代码都可供您根据需要进行调整。 My introductory post about it有更多关于如何在您的应用程序中使用它的详细信息。

关于objective-c - iOS 图像处理(失真),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9319265/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com