【OpenCV 4开发详解】图像LUT查找表
本文首发于“小白学视觉”微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究!
经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。 |
前面介绍的阈值比较方法中只有一个阈值,如果需要与多个阈值进行比较,就需要用到显示查找表(Look-Up-Table,LUT)。LUT查找表简单来说就是一个像素灰度值的映射表,它以像素灰度值作为索引,以灰度值映射后的数值作为表中的内容。例如我们有一个长度为5的存放字符的数组P[a,b,c,d,e]P[a,b,c,d,e]P[a,b,c,d,e] ,LUT查找表就是通过这个数组将0映射成a,将1映射成b,依次类推,其映射关系为P[0]=aP[0] = aP[0]=a 、P[1]=bP[1] = bP[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-17 LUT查找表设置示例
为了体会LUT查找表处理图像后的效果,在代码清单3-21中给出通过LUT()函数将灰度图像和彩色图像分别处理的示例程序,程序中分别应用单通道和三通道的查找表对彩色图像进行映射,最终结果在图3-18中给出。
代码清单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. }
图3-18 myLUT.cpp程序运行结果
OpenCV 4开发详解 |
往期推荐 |
---|
【OpenCV 4开发详解】Windows系统中安装OpenCV 4 |
【OpenCV 4开发详解】Ubuntu系统中安装OpenCV 4 |
【OpenCV 4开发详解】opencv_contrib扩展模块的安装 |
【OpenCV 4开发详解】Image Watch插件的使用 |
【OpenCV 4开发详解】安装过程中问题解决方案 |
【OpenCV 4开发详解】了解OpenCV的模块架构 |
【OpenCV 4开发详解】Mat类介绍 |
【OpenCV 4开发详解】Mat类构造与赋值 |
【OpenCV 4开发详解】4种读取Mat类元素的的方法 |
【OpenCV 4开发详解】图像的读取与显示 |
【OpenCV 4开发详解】视频加载与摄像头调用 |
【OpenCV 4开发详解】图像与视频的保存 |
【OpenCV 4开发详解】保存和读取XML和YMAL文件 |
【OpenCV 4开发详解】颜色模型与转换 |
【OpenCV 4开发详解】多通道分离与合并 |
【OpenCV 4开发详解】图像像素统计 |
【OpenCV 4开发详解】两图像间的像素操作 |
【OpenCV 4开发详解】图像二值化 |
经过几个月的努力,市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》将春节后由人民邮电出版社发行。如果小伙伴觉得内容有帮助,希望到时候多多支持! |
关注小白的小伙伴可以提前看到书中的内容,我们创建了学习交流群,欢迎各位小伙伴添加小白微信加入交流群,添加小白时请备注“学习OpenCV 4”。 |
【OpenCV 4开发详解】图像LUT查找表相关推荐
- 【OpenCV 4开发详解】图像膨胀
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- 【OpenCV 4开发详解】图像腐蚀
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- 【OpenCV 4开发详解】图像距离变换
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- 【OpenCV 4开发详解】图像连通域分析
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- 【OpenCV 4开发详解】图像噪声的种类与生成
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- 【OpenCV 4开发详解】图像卷积
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- 【OpenCV 4开发详解】图像直方图绘制
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- 【OpenCV 4开发详解】图像金字塔
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- 【OpenCV 4开发详解】图像上绘制几何图形
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
最新文章
- HTML5手机端几秒钟自动跳转
- php return 返回html_【php socket通讯】php实现http服务
- PHP的microtime
- Java当中包装类的理解和一些常用方法的分享(学习后分享)
- python1乘到10_python写一个循环1+到10打印计算步骤的脚本——纯粹无聊玩的
- 【电脑帮助】解决Wind10系统桌面没有“我的电脑”图标的问题
- 智能优化算法:入侵杂草优化算法-附代码
- 使用LINQ to SQL更新数据库(中):几种解决方案
- Atitit.uke 团队建设的组织与运营之道attilax总结
- Java实现地图的导出
- 一群人在网上直播自己怎么写代码,而且还有人爱看
- 联想笔记本计算机在哪里找不到,Win10 Lenovo笔记本电脑显示找不到相机
- Lookup函数的使用方法介绍(含VLookup和HLookup)
- ConvMAE:当Masked卷积遇见何恺明的MAE
- day3-转自金角大王
- 如何把身份证扫描成电子版?证件转电子版,这3个方法超好用
- TCP/UDP网络的通信
- ES集群安全重启节点的正确方法
- Vs2013未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包 解决方案
- 激荡二十五年:wind、同花顺、东方财富、大智慧等金融服务商争霸史