OpenCV4入门教程039:图像查找表(LUT)
索引地址:系列索引
LUT指显示查找表(Look-Up-Table),本质上就是一个RAM。它把数据事先写入RAM后,每当输入一个信号就等于输入一个地址进行查表,找出地址对应的内容,然后输出。
LUT的应用范围比较广泛,例如:LUT(Look-Up Table)可以应用到一张像素灰度值的映射表,它将实际采样到的像素灰度值经过一定的变换如阈值、反转、二值化、对比度调整、线性变换等,变成了另外一个与之对应的灰度值,这样可以起到突出图像的有用信息,增强图像的光对比度的作用。
很多PC系列卡具有8/10/12/16甚到32位的LUT,具体在LUT里进行什么样的变换是由软件来定义的。在这里LUT最重要的意义,就在于兼容了普通显示器的高阶显示功能,使得那些不能被普通显示器所显示的宽色域(一般指超过srgb)能够尽量被大致模拟在普通显示器上。然而,lut所模拟的效果,只能作为参考,作为修图时的大致观感。最佳、最完整的呈现,仍然是显示器、显卡以及素材本身的各项指标高度一致,所谓“硬解码”。
原理
函数原型为:
1 |
|
参数说明:
- 该函数的第一个输入参数要求的数据类型必须是CV_8U类型,但是可以是多通道的图像矩阵。
- 第二个参数根据其参数说明可以知道输入量是一个1×256的矩阵,其中存放着每个像素灰度值映射后的数值,其形式如下表所示。如果第二个参数是单通道,则输入变量中的每个通道都按照一个LUT查找表进行映射;如果第二个参数是多通道,则输入变量中的第i个通道按照第二个参数的第i个通道LUT查找表进行映射。与之前的函数不同,函数输出图像的数据类型不与原图像的数据类型保持一致,而是和LUT查找表的数据类型保持一致,这是因为将原灰度值映射到新的空间中,因此需要与新空间中的数据类型保持一致。
- dst:输出图像矩阵,其尺寸与src相同,数据类型与lut相同。
比如说:
原灰度值 | 值 |
---|---|
0 | 0 |
1 | 0 |
2 | 0 |
3 | 0 |
4 | 0 |
… | 0 |
100 | 0 |
101 | 1 |
102 | 1 |
103 | 1 |
… | 1 |
200 | 1 |
201 | 2 |
202 | 2 |
… | 2 |
255 | 2 |
如果是普通的三通道彩色图,每个通道都是这种操作
R | G | B | |||
---|---|---|---|---|---|
原R像素值 | 新值 | 原G像素值 | 值 | 原B像素值 | 值 |
0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | 0 | 1 | 0 |
2 | 0 | 2 | 0 | 2 | 0 |
3 | 0 | 3 | 0 | 3 | 0 |
4 | 0 | 4 | 0 | 4 | 0 |
… | 0 | … | 0 | … | 0 |
100 | 0 | 100 | 0 | 100 | 0 |
101 | 1 | 101 | 1 | 101 | 1 |
102 | 1 | 102 | 1 | 102 | 1 |
103 | 1 | 103 | 1 | 103 | 1 |
… | 1 | … | 1 | … | 1 |
200 | 1 | 200 | 1 | 200 | 1 |
201 | 2 | 201 | 2 | 201 | 2 |
202 | 2 | 202 | 2 | 202 | 2 |
… | 2 | … | 2 | … | 2 |
255 | 2 | 255 | 2 | 255 | 2 |
测试代码:
1 |
|
测试结果:
OpenCV4入门教程039:图像查找表(LUT)
https://blog.jackeylea.com/opencv/opencv-image-lookup-table/