opencv LUT函数 颜色查找表

在处理图片的时候,有时候需要对其进行一个映射。比如将灰度图的值对应到RGB的值,或者将灰度图由某个区间映射到另外一个区间,这时候就需要lut了,lut是look up table查找表的意思。
这是我参考的博客链接
https://blog.csdn.net/anjisi/article/details/53899222

1 单通道映射到单通道

#include
using namespace cv;
int main()
{
    //查找表,数组的下标对应图片里面的灰度值
    //例如lutData[20]=0;表示灰度为20的像素其对应的值0.
    uchar lutData[256];
    for (int i = 0; i<256; i++)
    {
        if(i<=100)
        lutData[i] =0;
        if (i > 100 && i <= 200)
            lutData[i] = 100;
        if (i > 200)
            lutData[i] = 255;
    }
    Mat lut(1, 256, CV_8UC1, lutData);  //创建Mat,表示映射信息
    Mat a = imread("1.png", CV_LOAD_IMAGE_GRAYSCALE);
    Mat b;
    LUT(a, lut, b);
}

2 单通道映射到三通道

需要注意的是,首先要将灰度图,转成RGB格式,然后才能使用lut进行映射。

#include
using namespace cv;
int main()
{
    uchar lutData[256 * 3];
    int j = 0;
    for (int i = 0; i<256; i++)
    {
        if (i <= 100)
        {
            lutData[i * 3] = 0;
            lutData[i * 3 + 1] = 50;
            lutData[i * 3 + 2] = 50;
        }
        if (i > 100 && i <= 200)
        {
            lutData[i * 3] = 100;
            lutData[i * 3 + 1] = 10;
            lutData[i * 3 + 2] = 200;
        }
        if (i > 200)
        {
            lutData[i * 3] = 255;
            lutData[i * 3 + 1] = 200;
            lutData[i * 3 + 2] = 100;
        }
    
    }
    Mat lut(1, 256, CV_8UC3, lutData);
    Mat a = imread("2.png", CV_LOAD_IMAGE_GRAYSCALE);
    //先将灰度图转成RGB图片,然后再进行映射
    cv::cvtColor(res, res, cv::COLOR_GRAY2RGB);
    Mat b;
    LUT(a, lut, b);
}

你可能感兴趣的:(opencv LUT函数 颜色查找表)