OpenCV函数学习之cvLUT
2011-03-28 11:10
786 查看
何为LUT,就是指显示查找表(Look-Up-Table),LUT(Look-Up Table)实际上就是一张像素灰度值的映射表,它将实际采样到的像素灰度值经过一定的变换如阈值、反转、二值化、对比度调整、线性变换等,变成了另外一个与之对应的灰度值,这样可以起到突出图像的有用信息,增强图像的光对比度的作用。
我在以前写的python灰度变换就是和这个是一个意思
我们来看看实际运用效果:
这个程序,我们实现的是图像色彩的反转
效果如下:
我们通过实现不同的映射表来实现不同的变换效果
后来我发现一个小问题,我在前面实现的对数变换和指数变换的表和这里的表正好相反
我在前面的实现中 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> 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
- 新学的OpenCV函数:cvLUT
- OpenCV函数学习之cvLUT
- 学习汇编的一些心得,CV之后无法LINK和INT 21H的问题
- OpenCV学习笔记09--通过cvPtr2D或指针算法绘制图形
- 【OpenCV学习笔记】【类型转换】一(IplImage和cv::Mat的类型相互转换)
- Oopencv学习之反向投影
- OpenCv学习笔记(二)--Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
- CV学习-边缘探测
- CV学习向导
- [学习笔记]C#中使用EmguCv时出现的 “Emgu.CV.CvInvoke”的类型初始值设定项引发异常
- Opencv2 学习笔记<一>:cv::Mat数据访问方式
- OpenCv学习笔记(二)—cv::Mat学习
- 机器学习学习笔记----LinearRegression,RidgeCV,LassoCV,ElasticNetCV
- 全球机器学习ML、机器视觉CV、 图像处理PP领域的学习站点
- 学习笔记——CV_IMAGE_ELEM
- 【CV知识学习】Fisher Vector
- 小白入门计算机视觉:这是最全的一份CV技术学习之路
- OpenCv学习笔记(二)—cv::Mat学习
- OpenCv学习笔记(二)—cv::Mat学习