1 LUT颜色查找表介绍

  • Look Up Table(LUT)查找表

1、颜色查找表就是一种像素值映射,如下是一个对比度改变图像的查找表,从图中可以知道:

  • 原图中像素值为40的像素,经过查找表映射后值变为90
  • 原图中像素值为30的像素,经过查找表映射后值变为10
  • 当原图所有的像素值都经过查找表映射后就会得到一张对比度变高的图像

python mmpeg录屏 python lut_st表

有人可能就会问了,那不就是对图中的每个像素值进行了计算吗,没错,就是进行了进算,但是查找表中的计算是提前计算好的,你只需要知道40映射过去得到的值是90,甚至不需要知道它具体是根据什么关系计算得到的这个值!

2、查找表(LUT)有什么作用呢

查找表:本质就是根据某个递增、递减或某种关系的函数,对像素值0-255这256个值进行计算,然后把计算的结果存储到一张表格中,当我们要对某张图片中的像素值进行颜色变换时,直接从查找表中找计算好的映射值,这种方法就非常快,当然很多类似的问题,也都是可以通过查找表这种方式去提高计算速度的!

  • 颜色查找表一般用来对图像进行色彩变换
  • 颜色查找表可以加快计算速度(因为查找表中的值是提前计算好的)

2opencv的applyColorMap()函数进行图片彩色变换

1、applyColorMap(src, dst, COLORMAP)参数:

  • src 表示输入图像
  • dst表示输出图像
  • 匹配到的颜色LUT, OpenCV支持22种颜色风格的查找表映射

2.1 查看opencv有哪些颜色查找表

import cv2 as cv


cv2_luts = [lut for lut in dir(cv) if lut.startswith("COLORMAP_")]
print(f"opencv lut colormap number: {len(cv2_luts)}")
print(f"opencv luts colormap: {cv2_luts}")

输出结果如下:

opencv lut colormap number: 22
opencv luts colormap: ['COLORMAP_AUTUMN', 'COLORMAP_BONE', 'COLORMAP_CIVIDIS', 'COLORMAP_COOL', 'COLORMAP_DEEPGREEN', 
'COLORMAP_HOT', 'COLORMAP_HSV', 'COLORMAP_INFERNO', 'COLORMAP_JET', 'COLORMAP_MAGMA', 'COLORMAP_OCEAN', 'COLORMAP_PARULA', 
'COLORMAP_PINK', 'COLORMAP_PLASMA', 'COLORMAP_RAINBOW', 'COLORMAP_SPRING', 'COLORMAP_SUMMER', 'COLORMAP_TURBO', 
'COLORMAP_TWILIGHT', 'COLORMAP_TWILIGHT_SHIFTED', 'COLORMAP_VIRIDIS', 'COLORMAP_WINTER']

2.2 使用查找表给灰度图添加为彩色

1、代码

灰色图:

python mmpeg录屏 python lut_st表_02

import cv2 as cv
import numpy as np

image = cv.imread("./canjian.png")
print(image.shape)
image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
print(image.shape)
cv.imwrite("canjian_gray.png", image)
color_image = cv.applyColorMap(image, cv.COLORMAP_JET)
cv.imshow("image", image)
cv.imshow("color_image", color_image)
cv.waitKey(0)
cv.destroyAllWindows()

添加伪彩色后的结果:

python mmpeg录屏 python lut_OpenCV_03

2.3 使用opencv提供的所有颜色查找表进行颜色变换

1、代码

原图:

python mmpeg录屏 python lut_OpenCV_04

import cv2 as cv
import numpy as np


cv2_luts = [lut for lut in dir(cv) if lut.startswith("COLORMAP_")]
print(f"opencv lut colormap number: {len(cv2_luts)}")
print(f"opencv luts colormap: {cv2_luts}")


print("cv.COLORMAP_COOL", type("cv.COLORMAP_COOL",))
print(eval("cv.COLORMAP_COOL"), type(eval("cv.COLORMAP_COOL")))


image = cv.imread('./messi5.jpg')
all_lut_imgs = [(lut, cv.applyColorMap(image, eval("cv."+lut))) for lut in cv2_luts]


add_text_imgs = [cv.putText(lut_img[1], lut_img[0], (20, 20), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2) for lut_img in all_lut_imgs]


col1 = np.vstack(tuple(add_text_imgs[0:11]))
col2 = np.vstack(tuple(add_text_imgs[11:22]))
result = np.hstack((col1, col2))
cv.imwrite("lut_result.jpg", result)
cv.imshow("result", result)
cv.waitKey(0)

2、显示结果如下:

python mmpeg录屏 python lut_st表_05