LUT是look up table的缩写,中文解释:显示查找表,实际意义很简单易懂。
举个例子,如果是单通道的图像,灰度梯度是0~255,即分为256级。
你可以设置对应灰度转化成你设置成的灰度
table[256];
table[0] = 2;
table[1] = 5;
像上图就是把原灰度0的值变成2,灰度1变为5。
展示下如何使用LUT进行图像压缩。
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat image = imread("lena.png",IMREAD_GRAYSCALE);
Mat lookUpTable(1, 256, CV_8U);
uchar table[256];
int divideWith = 20; //压缩级 20灰度为1级
for(int i = 0; i < 256; ++i)
table[i] = divideWith * (i / divideWith);
Mat dst;
uchar *p = lookUpTable.data;
for(int i = 0; i < 256; ++i)
{
p[i] = table[i];
}
for(int i = 0; i < 256; i++)
{
LUT(image,lookUpTable, dst);
}
imshow("src",image);
imshow("dst",dst);
waitKey();
}
左图为原图,右图通过20为一级的颜色空间缩减(0~19为0, 20~39为20 以此类推)