概念
OpenCV查找表的定义:
查找表【i】=newvalue
查找表第i项(灰度值i)的新值为 newvalue。也就是,将原灰度图像中灰度值为i的像素变为灰度值”newvalue“。查找表可以看成一个简单的一对一的映射函数 y=f(x)。
为什么要用查找表?
查找表用起来比较方便,对于一些简单灰度图像变换,可以定义多个查找表。然后使用同一个调用函数,调用不同的查找表,实现不同的功能。
应用
查找表应用在灰度图像中,它有点像一个向量(1行256列),256列对应0~255灰度值。
定义查找表代码如下:
cv::Mat lookup_negative(1, 256, CV_8U);//矩阵只有1个通道,用CV_8U类型
接下来,定义查找表中的映射函数
//变负片
for (int i = 0; i < 256; i++)
lookup_negative.at<uchar>(i) = 255 - i;
现在定义了一个生成负片图像的查找表,然后调用该查找表处理图像。
//读取原图像
cv::Mat image = cv::imread("图像.jpg", 0);
//保存结果
cv::Mat result;
//将原图像变为负片
cv::LUT(image, lookup, result);
cv::imshow("负片",result);
函数cv::LUT(),将定义的查找表应用在原图像,并输入结果图像。该函数有三个参数,第一个参数是输入图像,第二参数是查找表,第三个参数是输出图像。
在实现一些简单的灰度图像变换时,可以定义多个查找表实现不同的功能(如负片,灰度增强、二值化等等),也可以将其封装在类中。在程序中只需要用一条代码 cv::LUT()调用便可。