我正在为iOS的图像处理应用程序工作,并且我的应用程序的各个阶段之一是基于矢量的图像拼版/颜色检测。现在,我已经编写了代码,可以按像素来确定分色的颜色,但是如果iOS处理器处理图像中的每个像素,我认为对于处理器来说都是非常困难的。因此,我想知道是否可以使用图形处理器。iOS CGImageRef像素着色器
我想创建一种“像素着色器”,它使用OpenGL-ES或其他渲染技术快速处理和张贴图像。我不知道从哪里开始(我已经为Unity3D编写了简单着色器,但从未为它们编写底层编程)。
任何人都可以指向正确的方向吗?
在某些时候,我需要基准处理时间交叉点作为输入数据大小的函数,特别是如果考虑加速作为并行化CPU上的某些操作的手段。我认为我在iOS 4.0上处理来自GPU上的CGImage或UIImage的640x480帧与优化的CPU绑定功能的整体胜利,但我需要为此生成一些硬编码。单独转换到Core Graphics类型和单独转换比纹理上传慢得多,所以这对我来说更是一个瓶颈。 – 2012-04-05 17:40:20
我的CPU例程永远不会达到Core Graphics;它们用于实时相机输入,因此可直接在相机返回的'CVPixelBuffer'上操作。我在上一次WWDC巡回赛中与Alan Schaffer进行了一次快速问答,他似乎承认,虽然iOS 5的面部检测需要GPU合作,但由于来回成本的原因,没有公共API适合重新实现。当时我并没有意识到新的核心视频相关机制,它可以有效地为您提供直接的纹理内存访问,因此未对其进行讨论。 – Tommy 2012-04-05 18:59:29
是的,直接使用OpenGL ES中的相机帧可以比任何CPU绑定的速度快得多。为了在640x480图像上进行简单的棕褐色调调整,我可以在iPhone 4(2.5 ms,带有iOS 5.0纹理缓存)的情况下以6 ms的速度从捕捉到显示,CPU上的任何内容都不会靠近。就面部检测而言,完全基于GPU的OpenGL ES 2.0实现非常有趣:http://fileadmin.cs.lth.se/graphics/theses/projects/facerecognition/。在某些时候,我想尝试一下。 – 2012-04-05 19:34:01