006 LUT的作用与用法

2019-07-26  本文已影响0人  几时见得清梦
    • LUT的作用:避免对每个像素都进行一次计算。预先计算每个像素值的对应的匹配值,然后直接对原图中的像素值在LUT中进行查找,即可快速得到匹配值,减少大量不必要的计算。
    • LUT不单单用于图像中。在数据处理中,只要知道原始数据范围、变换公式、变换后得到的数据,也可以使用LUT加快速度。
    • LUT实际用途:将一个颜色空间的图匹配到另一个颜色空间;将某个对比度的图匹配到另一对比度;图像增强、产生伪彩色等;
使用LUT改变图像对比度
LUT实验结果
  1. OpenCV的applyColorMap函数内置了十几种伪彩色替换的LUT。


    applyColorMap内置的LUT

C++

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;
void customColorMap(Mat &image);
int main(int argc, const char *argv[])
{
    Mat src = imread("D:/vcprojects/images/cos.jpg");
    if (src.empty())
    {
        printf("could not load image...\n");
        return -1;
    }
    Mat gray, dst;
    // 使用LUT
    applyColorMap(src, dst, COLORMAP_SUMMER); //applyColorMap是OpenCV内置API,内置了十几种查找表,需要三个参数(输入图,输出图,查找表)
    // 显示结果
    imshow("colorMap", dst);

    cvtColor(src, gray, COLOR_BGR2GRAY);
    imshow("gray", gray);
    customColorMap(gray);

    waitKey(0);
    return 0;
}


void customColorMap(Mat &image) { //自定义查找表变换函数,将灰度图变为二值图
    int lut[256];
    for (int i = 0; i < 256; i++) {
        if (i < 127)
            lut[i] = 0;
        else
            lut[i] = 255;
    }

    int h = image.rows;
    int w = image.cols;
    for (int row = 0; row < h; row++) {
        for (int col = 0; col < w; col++) {
            int pv = image.at<uchar>(row, col);
            image.at<uchar>(row, col) = lut[pv];
        }
    }
    imshow("lut demo", image);
}

Python

import cv2 as cv

src = cv.imread("D:/vcprojects/images/test.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)
dst = cv.applyColorMap(src, cv.COLORMAP_COOL)
cv.imshow("output", dst)

# 伪色彩
image = cv.imread("D:/gloomyfish/canjian.jpg")
color_image = cv.applyColorMap(image, cv.COLORMAP_JET)
cv.imshow("image", image)
cv.imshow("color_image", color_image)
cv.waitKey(0)
cv.destroyAllWindows()
上一篇下一篇

猜你喜欢

热点阅读