若矩阵元素存储的是单通道像素,使用 C 或 C++ 无符号字符类型(uchar),那么像素可有 256 个不同的取值(0 ~255)。若图像采用三通道存储,颜色可有一千六百多万中取值(0 ~ -1),如此之多的颜色可能会对我们的算法性能造成影响。我们可以使用其中具有代表性的一部分来达到与原来近似的效果,即颜色空间缩减,做法是:将颜色值 0~9 映射为 0,10~19映射为10,等等。这样做可将颜色取值降低到 26 * 26 * 26 种。
由此,在处理较大的图像时,我们可以预先计算出所有可能的像素取值,将其存入一个 table 中,之后可以使用查表法来进行赋值(随机存取)。
//查找表设置
int divideWith = 10;
uchar table[256];
for(int i = 0; i < 256; ++i)
table[i] = divideWith * (i / divideWith);
//遍历图像对每个像素赋新值
p[j] = table[p[j]];
1. LUT 函数:Look up table 操作。OpenCV官方提供的函数,原型为:
void LUT(InputArray src, InputArray lut, OutputArray dst);
(1)第一个参数,InputArray 类型的 src,输入图像。
(2)第二个参数,InputArray 类型的 lut,查找表。
(3)第三个参数,OutputArray 类型的 dst,输出图像。