OpenCV函数学习之cvLUT

简介:

何为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的点将不会改变,这样也就不能实现我们想要的指数变换和对数变换。

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

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

本文转自博客园知识天地的博客,原文链接:OpenCV函数学习之cvLUT,如需转载请自行联系原博主。


相关文章
|
3月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.3、图像缩放resize函数
OpenCV这么简单为啥不学——1.3、图像缩放resize函数
47 0
|
4月前
|
机器学习/深度学习 存储 数据库
Python3 OpenCV4 计算机视觉学习手册:6~11(5)
Python3 OpenCV4 计算机视觉学习手册:6~11(5)
57 0
|
2月前
|
存储 资源调度 算法
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
|
3月前
|
人工智能 Linux API
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
48 0
|
3月前
|
机器学习/深度学习 算法 数据可视化
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)-2
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)
101 0
|
3月前
|
机器学习/深度学习 Ubuntu Linux
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)-1
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)
57 1
|
2月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
|
2月前
|
算法 计算机视觉 C++
Opencv(C++)学习系列---Sobel索贝尔算子边缘检测
Opencv(C++)学习系列---Sobel索贝尔算子边缘检测
|
2月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Canny边缘检测算法
Opencv(C++)学习系列---Canny边缘检测算法
|
2月前
|
存储 计算机视觉 C++
Opencv(C++)学习系列---特征点检测和匹配
Opencv(C++)学习系列---特征点检测和匹配