首页 > 其他分享 >18.LUT查找表

18.LUT查找表

时间:2023-04-09 13:55:36浏览次数:28  
标签:LUT 映射 18 数据类型 查找 灰度 256

  前面介绍的阈值比较方法中只有一个阈值,如果需要与多个阈值进行比较,就需要用到显示查找表(Look-Up-Table,LUT)。LUT查找表简单来说就是一个像素灰度值的映射表,它以像素灰度值作为索引,以灰度值映射后的数值作为表中的内容。例如我们有一个长度为5的存放字符的数组,LUT查找表就是通过这个数组将0映射成a,将1映射成b,依次类推,其映射关系为。在OpenCV 4中提供了LUT()函数用于实现图像像素灰度值的LUT查找表功能,在代码清单3-20中给出了该函数的原型。

代码清单3-20 LUT()函数原型
1.  void cv::LUT(InputArray src,
2.                  InputArray lut,
3.                  OutputArray dst
4.                 )
  • src:输入图像矩阵,其数据类型只能是CV_8U。

  • lut:256个像素灰度值的查找表,单通道或者与src通道数相同。

  • dst:输出图像矩阵,其尺寸与src相同,数据类型与lut相同。

  该函数的第一个输入参数要求的数据类型必须是CV_8U类型,但是可以是多通道的图像矩阵。第二个参数根据其参数说明可以知道输入量是一个1×256的矩阵,其中存放着每个像素灰度值映射后的数值,其形式如图3-17所示。如果第二个参数是单通道,则输入变量中的每个通道都按照一个LUT查找表进行映射;如果第二个参数是多通道,则输入变量中的第i个通道按照第二个参数的第i个通道LUT查找表进行映射。与之前的函数不同,函数输出图像的数据类型不与原图像的数据类型保持一致,而是和LUT查找表的数据类型保持一致,这是因为将原灰度值映射到新的空间中,因此需要与新空间中的数据类型保持一致。

代码清单3-21 myLUT.cpp对图像进行查找表映射
1.  #include <opencv2\opencv.hpp>
2.  #include <iostream>
3.  
4.  using namespace std;
5.  using namespace cv;
6.  
7.  int main(int agrc, char** agrv)
8. {
9.    //LUT查找表第一层
10.    uchar lutFirst[256];
11.    for (int i = 0; i<256; i++)
12.    {
13.      if (i <= 100)
14.        lutFirst[i] = 0;
15.      if (i > 100 && i <= 200)
16.        lutFirst[i] = 100;
17.      if (i > 200)
18.        lutFirst[i] = 255;
19.    }
20.    Mat lutOne(1, 256, CV_8UC1, lutFirst);
21.  
22.    //LUT查找表第二层
23.    uchar lutSecond[256];
24.    for (int i = 0; i<256; i++)
25.    {
26.      if (i <= 100)
27.        lutSecond[i] = 0;
28.      if (i > 100 && i <= 150)
29.        lutSecond[i] = 100;
30.      if (i > 150 && i <= 200)
31.        lutSecond[i] = 150;
32.      if (i > 200)
33.        lutSecond[i] = 255;
34.    }
35.    Mat lutTwo(1, 256, CV_8UC1, lutSecond);
36.    
37.    //LUT查找表第三层
38.    uchar lutThird[256];
39.    for (int i = 0; i<256; i++)
40.    {
41.      if (i <= 100)
42.        lutThird[i] = 100;
43.      if (i > 100 && i <= 200)
44.        lutThird[i] = 200;
45.      if (i > 200)
46.        lutThird[i] = 255;
47.    }
48.    Mat lutThree(1, 256, CV_8UC1, lutThird);
49.  
50.    //拥有三通道的LUT查找表矩阵
51.    vector<Mat> mergeMats;
52.    mergeMats.push_back(lutOne);
53.    mergeMats.push_back(lutTwo);
54.    mergeMats.push_back(lutThree);
55.    Mat LutTree;
56.    merge(mergeMats, LutTree);
57.  
58.    //计算图像的查找表
59.    Mat img = imread("lena.png");
60.    if (img.empty())
61.    {
62.      cout << "请确认图像文件名称是否正确" << endl;
63.      return -1;
64.    }
65.  
66.    Mat gray, out0, out1, out2;
67.    cvtColor(img, gray, COLOR_BGR2GRAY);
68.    LUT(gray, lutOne, out0);
69.    LUT(img, lutOne, out1);
70.    LUT(img, LutTree, out2);
71.    imshow("out0", out0);
72.    imshow("out1", out1);
73.    imshow("out2", out2);
74.    waitKey(0);
75.    return 0;
76.  }

 

标签:LUT,映射,18,数据类型,查找,灰度,256
From: https://www.cnblogs.com/okmai77xue/p/17300238.html

相关文章

  • 20230318模拟赛(jnxxhzz)
    T1.彩虹树对于每一个u,v,我们都要去算u->v路径上有多少个不同的元素很显然,<spanclass="cke_resetcke_widget_drag_handler_container"><imgsrc="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="width="15"height=......
  • ubuntu18.04更改dns server
    打开 /etc/systemd/resolved.conf,设置变量DNS:$sudogedit  /etc/systemd/resolved.conf2.单击"save" 按钮,保存设置3.输入一下命令,使设置生效$systemctlrestartsystemd-resolved//重启systemd-resolved服务$systemctlenablesystemd-resolved//使能systemd-reso......
  • 『0018』 - Solidity Types - Solidity 结构体(Structs)
    作者:黎跃春,自定义结构体pragmasolidity^0.4.4;contractStudents{structPerson{uintage;uintstuID;stringname;}}Person就是我们自定义的一个新的结构体类型,结构体里面可以存放任意类型的值。初始化一个结构体初始化一个storage......
  • 巧如范金,精比琢玉,一分钟高效打造精美详实的Go语言技术简历(Golang1.18)
    转自刘悦研发少闲月,九月人倍忙。又到了一年一度的“金九银十”秋招季,又到了写简历的时节,如果你还在用传统的Word文档寻找模板,然后默默耕耘,显然就有些落后于时代了,本次我们尝试使用云平台flowcv高效打造一份巧如范金、精比琢玉的高品质Golang技术简历。首先来到云平台:flowcv.com......
  • LeetCode习题——在排序数组中查找元素的第一个和最后一个位置(二分查找)
    在排序数组中查找元素的第一个和最后一个位置力扣链接:在排序数组中查找元素的第一个和最后一个位置题目给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1,-1]。你......
  • 「Solution Set」4.7 小记
    省流:没有红太阳我效率很低。没洗头发我效率很低。[ABC281G]FarthestCity这好像是个智障题。我们考虑生成最短路树,而最短路树之后还可以连边。我们发现如果一个点向深度相同的点连边,或者是比自己高一层的点连边,是不会影响到自己在最短路树的距离的。我们不考虑最后一个点,最后......
  • codeforces 1804D Accommodation
    https://codeforces.com/problemset/problem/1804/D解题思路每个楼层是独立的,考虑怎么解决一层就可以了。求最大值就是尽量避免1和1合并,也就是尽量在不存在连续1的子序列中进行合并,如果还有需要合并的就只能用1和1合并。求最小值就是尽量合并1和1。由于只需要输出最大最小值,所......
  • 【题解】P4898 [IOI2018] seats 排座位
    思路线段树。题意可以转化成每次判定有多少个前缀满足所有结点构成矩形。首先排除确定矩阵坐标再数答案的做法,因为太难。所以考虑如何对前缀进行判定。一个简单的想法是维护前\(i\)个点中\(x,y\)坐标的最值,但这样只能暴力看矩阵中的所有元素,跑得很慢。不妨思考一下合法......
  • 软考高项第4版教程-差异点解析来啦(第18章)!
    继续高项信息系统项目管理师第4版教程的差异点解析,今天带来第18章的解析。估计还会有朋友问,上次解析到了第5章,这次怎么直接跳到了第18章呢?中间的章节不解析了吗?其实上次已经预报过了,这次在开头再解释下,咱们这次解析的重点在“差异点”3个字,我先把差异变化比较大的章节解析完成,再回......
  • python中的二分查找
    二分查找的前提是查找的数据按照顺序排序二分查找的核心思想是递归#arr:查找的对象#left:arr的左边界#right:arr的右边界#x:需要查找的数defbinary_search(arr,left,right,x):#左边界小于等于右边界ifleft<=right:#得到中位数mid=int((lef......