我正在为 iOS 开发一个图像处理应用程序,我的应用程序的各个阶段之一是基于矢量的图像分离/颜色检测。
现在,我已经编写了可以按像素确定分色后颜色的代码,但我想,如果是 iOS,则遍历图像中的每个像素对于处理器来说将是相当困难的。因此,我想知道是否可以改用图形处理器;
我想创建一种“像素着色器”,它使用 OpenGL-ES 或其他一些渲染技术来快速处理和分离图像。我不知道从哪里开始(我为 Unity3D 编写了简单的着色器,但从未为它们完成底层编程)。
谁能指出我正确的方向?
我正在为 iOS 开发一个图像处理应用程序,我的应用程序的各个阶段之一是基于矢量的图像分离/颜色检测。
现在,我已经编写了可以按像素确定分色后颜色的代码,但我想,如果是 iOS,则遍历图像中的每个像素对于处理器来说将是相当困难的。因此,我想知道是否可以改用图形处理器;
我想创建一种“像素着色器”,它使用 OpenGL-ES 或其他一些渲染技术来快速处理和分离图像。我不知道从哪里开始(我为 Unity3D 编写了简单的着色器,但从未为它们完成底层编程)。
谁能指出我正确的方向?
我打算从侧面来,建议你试试 Brad Larson 的GPUImage 框架,它把自己描述为“一个 BSD 授权的 iOS 库,可以让你将 GPU 加速的过滤器和其他效果应用于图像、实时摄像机视频和电影”。我没有使用过它,并假设您需要阅读一些 GL 来添加您自己的过滤器,但它会处理很多样板文件并提供很多预先打包的过滤器,这绝对值得研究。听起来您对 OpenGL 并不特别感兴趣,因此没有真正的理由去研究它。
我要补充一点,在 iOS 4 下,我发现在 CPU 上工作(使用 GCD 在内核之间分配)通常比在 GPU 上更快,因为在 GPU 上我需要能够在最后读取任何结果一种串行访问。这是因为 OpenGL 通常是这样设计的,即您上传图像,然后将其转换为它想要的任何格式,如果您想读回它,它会将其转换回您希望接收的一种格式并将其复制到你想要它。因此,您为 GPU 节省的费用是因为 GL 驱动程序必须分流和重新排列内存。从 iOS 5 开始,Apple 引入了一种特殊机制,可以有效地让 CPU 直接访问 OpenGL 的纹理存储,因此这可能不再是问题。