何为LUT,就是指显示查找表(Look-Up-Table),LUT(Look-Up Table)实际上就是一张像素灰度值的映射表,它将实际采样到的像素灰度值经过一定的变换如阈值、反转、二值化、对比度调整、线性变换等,变成了另外一个与之对应的灰度值,这样可以起到突出图像的有用信息,增强图像的光对比度的作用。

我在以前写的python灰度变换就是和这个是一个意思

我们来看看实际运用效果:

#include <cv.h>
#include <highgui.h>

using namespace std;

int main(int argc, char** argv) {
IplImage *src_image = 0, *dst_image = 0;
CvMat* lut_mat;
lut_mat = cvCreateMatHeader(1, 256, CV_8UC1);
uchar lut[256];
for (int i = 0; i < 256; i++) {
lut[i] = 255 - i;
}
src_image = cvLoadImage("Lena.jpg");
dst_image = cvCloneImage(src_image);
cvSetData(lut_mat, lut, 0);
cvLUT(src_image, dst_image, lut_mat);
cvNamedWindow("src_image", 0);
cvNamedWindow("dst_image", 0);
cvShowImage("src_image", src_image);
cvShowImage("dst_image", dst_image);
cvWaitKey(0);
cvReleaseImage(&src_image);
cvReleaseImage(&dst_image);
return 0;
}

这个程序,我们实现的是图像色彩的反转

效果如下:

我们通过实现不同的映射表来实现不同的变换效果

后来我发现一个小问题,我在前面实现的对数变换和指数变换的表和这里的表正好相反

我在前面的实现中 table[i] =j 其中 i 是原图中的灰度值,j 是要映射的灰度值。这样我原图中不同的灰度值可以映射到哦同一灰度值上

例如,我可以经过灰度变换把原图中灰度为230以上的点都映射为灰度值255

只需要table[230] = 255, table[231] = 255 ........table[255] = 255

但经过我编程实践后发现OpenCV中的映射表是table[j] = i; j 为要映射的值,i为原图中的值,

那么原图中最多只有一个灰度值能映射为255了,那table[255] = 230,table[255] = 231.........table[255] = 255;

最终都会导致前面的赋值被后面的覆盖,最后原图中灰度值为230-254的点将不会改变,这样也就不能实现我们想要的指数变换和对数变换。

因为他们都是一对多的映射

难道是我自己编程的问题,至少我现在是得到这样的结论

转载于:https://www.cnblogs.com/xianglan/archive/2011/03/28/1997548.html

OpenCV函数学习之cvLUT相关推荐

  1. OpenCV函数学习:cvRound,cvFloor,cvCeil

    函数cvRound,cvFloor,cvCeil 都是用一种舍入的方法将输入浮点数转换成整数: cvRound 返回跟参数最接近的整数值: cvFloor 返回不大于参数的最大整数值: cvCeil ...

  2. OpenCV函数 Laplacian 算子实现

    OpenCV函数 Laplacian 实现 Laplacian 算子 的离散模拟. 原理 前一节我们学习了 Sobel 算子 ,其基础来自于一个事实,即在边缘部分,像素值出现"跳跃" ...

  3. 超详细!使用OpenCV深度学习模块在图像分类下的应用实践

    专注计算机视觉前沿资讯和技术干货 微信公众号:极市平台 官网:https://www.cvmart.net/ 极市导读:本文来自6月份出版的新书<OpenCV深度学习应用与性能优化实践>, ...

  4. OpenCV示例学习(七):离散傅里变换(DFT)算子:getOptimalDFTSize(),copyMakeBorder(),magnitude(),log(),normalize()

    OpenCV示例学习(七):离散傅里变换(DFT)算子:getOptimalDFTSize(),copyMakeBorder(),magnitude(),log(),normalize() #incl ...

  5. opencv 计数后不动了 训练模型时_用OpenCV,深度学习和Python进行年龄识别

    (给Python编程开发加星标,提升编程技能.) 在本教程中,您将学习如何使用OpenCV,深度学习和Python执行年龄的自动识别/预测. 学完本教程后,您将能够以相当高的精确度去自动预测静态图像文 ...

  6. 基于python的opencv的学习

    前言 在了解基本的python语法后,我们终于可以开始进行一些项目的实践学习.这里 用opencv进行第一个python项目的上手. 这里我将会分享自己寒假对于opencv的学习 一.安装开发环境 推 ...

  7. 【计算机视觉】opencv入门学习笔记Part.1

    [计算机视觉]opencv入门学习笔记Part.1 1 前言 1.1 opencv概述(摘取自百度百科) 1.2 图像概念引入 1.3 安装opencv库 2 图像基本操作 2.1 图像的读取 2.2 ...

  8. OpenCV函数应用:基于二值图像的三种孔洞填充方法记录(附python,C++代码)

    系列文章目录 函数系列: OpenCV函数简记_第一章数字图像的基本概念(邻域,连通,色彩空间) OpenCV函数简记_第二章数字图像的基本操作(图像读写,图像像素获取,图像ROI获取,图像混合,图形 ...

  9. Opencv+Python学习记录9:掩膜(掩码)的使用(内附详细代码)

    一,基本概念 OpenCV中的很多函数都会指定一个掩模,也被称为掩码,例如: 计算结果=cv2.add(参数1,参数2,掩模) 当使用掩模参数时,操作只会在掩模值为非空的像素点上执行,并将其他像素点的 ...

最新文章

  1. opencv 行与列
  2. Android之Toolbar的三个问题:修改左边箭头颜色、怎样修改右边以及子activity中的toolbar添加返回箭头
  3. android url回调json,【求助】本地页面如何取某个URL返回的json
  4. 知乎高赞:有哪些值得刻意练习的心态?
  5. 编制一个函数jsValue(),求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数cnt,再求出所有满足此条件的四位数的平均值pjz1,以及不满足此条件的四位数的平均值pzj2
  6. 杨元:CSS浮动(float,clear)通俗讲解
  7. i9 9900k mysql_i9-9900K性能如何 CPU天梯图秒懂i9-9900K性能排行
  8. oracle12 group by 拼接字符串
  9. latex缩进与对齐_科学网—Latex算法排版,不同行缩进不同 - 张鹏的博文
  10. 2018 年大疆机器学习算法工程师春季提前批笔试题
  11. Panoply软件安装
  12. KVC 与 KVO 理解
  13. System.SetString - 获取字符串
  14. 企业数据治理及在美团的最佳实践
  15. 校园二手交易平台设计总览
  16. PS基础教程:[8]蒙版使用实例
  17. 芯动科技面试——数字IC/FPGA面试案例总结1
  18. 2022-2027年中国煤制尿素市场竞争态势及行业投资前景预测报告
  19. 中图分类号计算机 tp,中图分类号(TP)
  20. 8421 5421 2421 余3码

热门文章

  1. 【Swing编写图形用户界面】操作系统之磁盘调度算法图形界面和性能比较
  2. Ping一下Github,确认本地DNS无法解析方法
  3. Python程序的函数和代码复用
  4. 交管12123显示当前环境存在风险_政策|取消驾驶证年龄上限、推行异地通办,12项交管新政来了...
  5. 量子计算机最新研究进程,谷歌在量子计算机领域已取得重大突破,国内的研究进度怎么样了...
  6. 全球缺芯+瑞萨火灾——网络营销之下一众车企减产的减产,停产的停产
  7. H1标签对网站优化有什么作用?
  8. python字符串打印教学_python字符串格式化教你正确打印 : D
  9. java打字母小游戏总结与收获,java:打字母小游戏demo
  10. java git subtree_Git subtree使用