美文网首页
opencv LUT函数 颜色查找表

opencv LUT函数 颜色查找表

作者: ryan_ren | 来源:发表于2019-07-11 15:51 被阅读0次

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

    1 单通道映射到单通道

    #include<highgui\highgui.hpp>
    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<highgui\highgui.hpp>
    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函数 颜色查找表

          本文链接:https://www.haomeiwen.com/subject/bsldkctx.html