OpenCV(九):LUT查找表

简介: 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

目录
相关文章
|
机器学习/深度学习 人工智能 数据可视化
【好物分享】onnx-modifier:可视化操作助力模型更改,让你不再为更改模型烦恼!
【好物分享】onnx-modifier:可视化操作助力模型更改,让你不再为更改模型烦恼!
2151 0
【好物分享】onnx-modifier:可视化操作助力模型更改,让你不再为更改模型烦恼!
Hutool 工具:轻松校验手机号、身份证号、邮箱、统一社会信用代码、车牌号、车架号等信息,省时省心!
Hutool 工具:轻松校验手机号、身份证号、邮箱、统一社会信用代码、车牌号、车架号等信息,省时省心!
|
算法 数据库 计算机视觉
Dataset之COCO数据集:COCO数据集的简介、下载、使用方法之详细攻略
Dataset之COCO数据集:COCO数据集的简介、下载、使用方法之详细攻略
|
算法 计算机视觉 Python
一文讲解图像梯度
图像梯度计算的是图像变化的幅度。对于图像的边缘部分,其灰度值变化较大,梯度值变化也较大;相反,对于图像中比较平滑的部分,其灰度值变化较小,相应的梯度值变化也较小。一般情况下,图像梯度计算的是图像的边缘信息。它在图像处理和计算机视觉中具有重要的应用,常用于边缘检测、特征提取和图像增强等任务。
1036 0
|
Ubuntu 计算机视觉 C++
Ubuntu 20.04 编译 Opencv 4.11,详细步骤(带图)及报错解决,我的踩坑之旅~
Ubuntu 20.04 编译 Opencv 4.11,详细步骤(带图)及报错解决,我的踩坑之旅~
9500 0
|
机器学习/深度学习 人工智能 文字识别
ultralytics YOLO11 全新发布!(原理介绍+代码详见+结构框图)
本文详细介绍YOLO11,包括其全新特性、代码实现及结构框图,并提供如何使用NEU-DET数据集进行训练的指南。YOLO11在前代基础上引入了新功能和改进,如C3k2、C2PSA模块和更轻量级的分类检测头,显著提升了模型的性能和灵活性。文中还对比了YOLO11与YOLOv8的区别,并展示了训练过程和结果的可视化
19859 0
|
安全 Linux 网络安全
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
126138 0
|
算法
STM32CubeMX PID差速循迹小车
STM32CubeMX PID差速循迹小车
588 1
STM32CubeMX PID差速循迹小车
|
计算机视觉 Python
【Python】已解决:ModuleNotFoundError: No module named ‘cv2’
【Python】已解决:ModuleNotFoundError: No module named ‘cv2’
6392 0
|
机器学习/深度学习 JSON 并行计算