OpenCV函数学习之cvLUT
2012-02-21 15:11
302 查看
何为LUT,就是指显示查找表(Look-Up-Table),LUT(Look-Up Table)实际上就是一张像素灰度值的映射表,它将实际采样到的像素灰度值经过一定的变换如阈值、反转、二值化、对比度调整、线性变换等,变成了另外一个与之对应的灰度值,这样可以起到突出图像的有用信息,增强图像的光对比度的作用。
我在以前写的python灰度变换就是和这个是一个意思
我们来看看实际运用效果:
#include <cv.h>
#include <highgui.h>
usingnamespace 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);
return0;
}
复制代码
这个程序,我们实现的是图像色彩的反转
效果如下:
![](http://pic002.cnblogs.com/images/2011/221871/2011032810164256.png)
我们通过实现不同的映射表来实现不同的变换效果
后来我发现一个小问题,我在前面实现的对数变换和指数变换的表和这里的表正好相反
我在前面的实现中 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的点将不会改变,这样也就不能实现我们想要的指数变换和对数变换。
因为他们都是一对多的映射
难道是我自己编程的问题,至少我现在是得到这样的结论
我在以前写的python灰度变换就是和这个是一个意思
我们来看看实际运用效果:
#include <cv.h>
#include <highgui.h>
usingnamespace 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);
return0;
}
复制代码
这个程序,我们实现的是图像色彩的反转
效果如下:
![](http://pic002.cnblogs.com/images/2011/221871/2011032810164256.png)
我们通过实现不同的映射表来实现不同的变换效果
后来我发现一个小问题,我在前面实现的对数变换和指数变换的表和这里的表正好相反
我在前面的实现中 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学习笔记(2)—— CV_Assert 函数
- 【OpenCV学习笔记】【函数学习】五(颜色空间转换cvCvtColor()函数)
- opencv学习笔记1:CV_MAT_ELEM_PTR与CV_MAT_ELEM的用法
- OpenCV轮廓、边缘、边界的相关函数cv::findContours()等
- OpenCV函数学习之cvLUT
- OpenCV中cvWaitKey()函数注意事项
- OpenCV学习之旅——copyMakeBorder()函数
- 5. openCV中常用函数学习
- 【OpenCV学习笔记】【函数学习】九(RGB空间各通道分离)
- 【OpenCV学习笔记】七、基本绘图函数
- opencv3.0学习笔记【10/14】各种滤波函数
- 使用OpenCV中cvFindContour函数检测轮廓的心得
- 主动轮廓线模型Snake模型简介&openCV中cvSnakeImage()函数代码分析
- OpenCV中的模板匹配函数:cvMatchTemplate
- 【OpenCV学习笔记】【函数学习】十八(保存图片)
- 学习opencv(2)---opencv中C风格和C++风格函数区别
- 《OpenCV》Part11 OpenCV3.1.0 Qt中的信号槽函数传递cv::Mat格式参数
- OpenCV学习笔记(3):一些函数等的解释(更新中...)
- OpenCV函数学习:alignPtr对齐指针
- OpenCV函数学习之cvAbsDiff