0

我正在使用过滤器进行图像处理,因为它目前很酷,我用来创建过滤器的一种快速方法是计算 rgb 曲线配置文件,因此我有 3 个数组,redProfile、greenProfile、blueProfile。

当我对循环中的像素应用效果时,我通常会这样做:

*dest++ = bLomoRGB[top(r)];
*dest++ = gLomoRGB[top(g)];
*dest++ = rLomoRGB[top(b)];
*dest++ = 0xff;         
x++;        
if (x > 639) { x = 0; y++; }        
continue;

因此,对于每种颜色,我都会在配置文件中选择颜色。

这是否可以与矩阵一起使用,或者更有效地执行它?

即编码类似: Array a = all my pixels Array b = my index Apply b on a

我知道这比伪代码更简单,甚至不应该作为代码变灰,但我仍然想知道是否总是保持一个循环来做一件事情,比如改变所有数字的索引值。

4

1 回答 1

2

我怀疑是否有一些魔术操作可以为整个矩阵执行此操作。

但是,如果您一次将数据写入 32 位块,则可以更有效地完成此操作:

uint32_t *dest;

*dest++ = (bLomoRGB[top(r)] & 0xff) | ((gLomoRGB[top(g)] & 0xff) << 8) | 
          ((rLomoRGB[top(b)] & 0xff) << 16) | 0xff000000;

此外,代码可以很好地并行化。如果您正在寻找一些并行化此类循环的标准方法,请查看OpenMP

于 2013-06-25T19:48:45.433 回答