《OpenCV3编程入门》——5.1 访问图像中的像素--颜色空间缩减及LUT函数:Look up table操作

1、颜色空间缩减

颜色空间缩减的做法是:将现有颜色空间值除以某个输入值,以获得较少的颜色数。即做减法,比如颜色值0到9可取为新值0,10到19可取为10,以此类推。

有一个简单的公式来实现颜色空间缩减:I_{new}=\left ( I_{old} /10\right)\times 10

在处理像素时,每个像素需要进行一遍上述公式计算,也需要一定的时间花销。我们可以把256中计算好的结果提前存在列表table中,这样每种情况不需计算,直接从table中取取结果即可。

int divideWith = 10;
unchar table[256];
for( int i =0; i<256; ++i)
    table[i] = divideWith*(i/divideWith);

于是table[i]存放的是值为 i 的像素减小颜色空间的结果,这样就可以理解上述方法中的操作:p [j] = table[ p [j] ]

简单的颜色空间缩减算法就由以下两步组成:

  1. 遍历图像矩阵的每一个像素
  2. 对像素应用上述公式

2、LUT函数:Look up table操作

Look up table操作使用operationsOnArrays:LUT()<lut>函数,用于批量进行图像元素查找、扫描与操作图像。使用方法如下:

//首先建立一个mat型用于查表
Mat lookUpTable(1, 256, CV_8U);
uchar* p = lookUpTable.data;
for(int i = 0; i < 256; ++i)
    p[i] = table[i];

//调用函数(I是输入,J是输出)
for (int i = 0; i < times; ++i)
    LUT(I, lookUpTable, J);

猜你喜欢

转载自blog.csdn.net/Sophia_11/article/details/84592870
今日推荐