GPUImage获取图像列的总和

时间:2012-10-12 16:53:34

标签: ios gpuimage

我在项目中使用GPUImage,我需要一种有效的方法来获取列总和。朴素的方式显然是检索原始数据并添加每列的值。任何人都可以建议更快的方式吗?

1 个答案:

答案 0 :(得分:1)

这样做的一种方法是使用我对GPUImageAverageColor类采用的方法(如this answer中所述),而不是减少每一步的每个帧的总大小,只对一个图像的尺寸。

平均滤色器通过在X和Y中降低四分之一来确定整个图像的平均颜色,在每一步平均16个像素。如果在单一方向上操作,您应该能够使用硬件插值在每个步骤中将单个方向减少18倍,并获得良好的性能。您的最后一步可能需要在更小的图像上进行基于CPU的快速迭代,或者需要对此着色器进行调整,将一列中的最后几个像素拉到该列的最终结果像素中。

你注意到我在这里一直在谈论平均,因为任何OpenGL ES操作的输出值都需要是颜色方面的,每个通道只有0-255范围。总和很容易溢出这个,但你可以使用平均值作为总和的近似值,动态范围更有限。

如果你只关心一个颜色通道,你可能会在RGBA通道中编码一个更大的值,并保持一个32位的总和。

除了我上面描述的内容之外,您还可以在Accelerate框架的帮助下查看此总和。虽然可能没有基于着色器的减少那么快,但它可能足以满足您的需求。