OpenCV(九):LUT查找表

LUT(Look-Up Table)查找表是OpenCV中一种常用的图像处理方法,用于对图像进行像素级别的颜色映射或图像增强操作。LUT查找表可以实现快速、高效的颜色转换和像素操作,尤其在处理大量像素的情况下具有优势。以下是关于OpenCV LUT查找表的一些重要知识点:

1.LUT数据结构:在OpenCV中,LUT查找表通常是一个一维数组或矩阵,其大小通常为256个元素(对于8位图像)。每个元素表示一种颜色或灰度级的映射。可以通过修改查找表中的元素来实现颜色的映射或像素操作。

2.查找表映射:将LUT查找表应用于图像时,可以使用OpenCV的cv::LUT函数进行映射。该函数的原型如下:

void cv::LUT(InputArray src, InputArray lut, OutputArray dst);

  • src:输入图像,可以是单通道或多通道的。
  • lut:查找表,通常是创建的LUT数据结构。
  • dst:输出图像,与输入图像具有相同的大小和类型。

3.创建四通道的LUT查找表矩阵,使用LUT函数进行映射


    //将bitmap转化为Mat类
    Mat image(info.height, info.width, CV_8UC4, pixels);
    uchar lutFirst[256];
    for(int i=0;i<256;i++){
        if(i<=100)
             lutFirst[i]=0;
        if(i>100&&i<=200)
            lutFirst[i]=100;
        if(i>200)
            lutFirst[i]=255;
    }
    Mat lutOne(1,256,CV_8UC1,lutFirst);
    //LUT查找表第二层
    uchar lutSecond[256];
    for(int i=0;i<256;i++) {
        if (i <= 100)
            lutSecond[i] = 0;
        if (i > 100 && i <= 150)
            lutSecond[i] = 100;
        if (i > 150 && i <= 200)
            lutSecond[i] = 150;
        if (i > 200)
            lutSecond[i] = 255;
    }
    Mat lutTow(1,256,CV_8UC1,lutSecond);
    //LUT查找表第三层
    uchar lutThird[256];
    for(int i=0;i<256;i++) {
        if (i <= 100)
            lutThird[i] = 200;
        if (i > 100 && i <= 200)
            lutThird[i] = 200;
        if (i > 200)
            lutThird[i] = 255;
    }
    Mat lutThree(1,256,CV_8UC1,lutThird);
    //LUT查找表第四层
    uchar lutFour[256];
    for(int i=0;i<256;i++) {
        if (i <= 100)
            lutFour[i] = 200;
        if (i > 100 && i <= 200)
            lutFour[i] = 200;
        if (i > 200)
            lutFour[i] = 255;
    }
    Mat lutfour(1,256,CV_8UC1,lutFour);
    //拥有四通道的LUT查找表矩阵
    vector<Mat> mergeMats;
    mergeMats.push_back(lutOne);
    mergeMats.push_back(lutTow);
    mergeMats.push_back(lutThree);
    mergeMats.push_back(lutfour);
    Mat LutTree;
    merge(mergeMats,LutTree);
    Mat gray,out0,out1,out2;
    cvtColor(image,gray,COLOR_BGR2GRAY);
    LUT(gray,lutOne,out0);
    LUT(image,lutOne,out1);
    LUT(image,LutTree,out2);
    imwrite("/sdcard/DCIM/out0.jpg",out0);
    imwrite("/sdcard/DCIM/out1.jpg",out1);
    imwrite("/sdcard/DCIM/out2.jpg",out2);

    out0                                               out1                                                   out2

猜你喜欢

转载自blog.csdn.net/weixin_63357306/article/details/132587831