zoukankan      html  css  js  c++  java
  • OpenCV函数学习之cvLUT

    何为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;
    }

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

    效果如下:

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

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

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

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

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

  • 相关阅读:
    【Leetcode】155: 最小栈(Python)
    【深入理解计算机系统】 八:AVR汇编语言
    【深入理解计算机系统】 七:AVR指令集架构
    【深入理解计算机系统】 六:AVR架构和运行环境
    nginx+lua 记一次特殊字符导致"丢包"问题
    python2.7 升级到 python3.6
    神奇的 SQL 之擦肩而过 → 真的用到索引了吗
    神奇的 SQL 之 HAVING → 容易被轻视的主角
    Delphi
    Windows authentication in linux docker container(转发)
  • 原文地址:https://www.cnblogs.com/mfryf/p/2361351.html
Copyright © 2011-2022 走看看