整个过程主要分为四步,一是将RGB颜色空间转换维HSV颜色空间,二是提取有光照分量,采用retinex相关算法对光照进行多尺度高斯卷积,三是采用伽马函数对多尺度光照分量进行处理,最后将HSV空间颜色转换为RGB。流程图见下,代码直接附上,尺度参数可调,伽马参数也可调。
import cv2
import numpy as np
import os
def adjust_gamma(image, gamma=1.0):
invGamma = 1.0 / gamma
# table = []
print(image)
image=np.array(image).astype(np.uint8)
# table.append(((i / 255.0) ** invGamma) * 255)
# table = np.array(table).astype("uint8")
gamma_table = [np.power(x / 255.0, invGamma) * 255.0 for x in range(256)]
# numpy数组默认数据类型为int32,需要将数据类型转换成opencv图像适合使用的无符号8位整型uint8,否则会报错
gamma_table = np.round(np.array(gamma_table)).astype(np.uint8)
print(image)
return cv2.LUT(image, gamma_table)
def MSR(img, scales):
weight = 1 / 3.0
scales_size = len(scales)