import cv2 import numpy as np img=cv2.imread('4.jpg') def adjust_gamma(image, gamma=1.0): invGamma = 1.0/gamma table = [] for i in range(256): table.append(((i / 255.0) ** invGamma) * 255) table = np.array(table).astype("uint8") return cv2.LUT(image, table) img_gamma = adjust_gamma(img, 2) cv2.imshow("img",img) cv2.imshow("img_gamma",img_gamma) key = cv2.waitKey() if key == 27: cv2.destroyAllWindows()
提到LUT,很多人可能都会觉得这是一个很专业很高深的词汇,LUT其实就是Look Up Table(颜色查找表)的缩写,简单点儿理解就是:通过LUT,我们可以将一组RGB值输出为另一组RGB值,从而改变画面的曝光与色彩。LUT文件就是一个包含了可以改变输入颜色信息的矩阵数据。LUT本身并不进行运算,只需在其中列举一系列输入与输出数据即可,这些数据呈一一对应的关系,系统按照此对应关系为每一个输入值查找到与其对应的输出值,这样即可完成转换,也是LUT基本不消耗CPU资源的原因。
原文链接:https://blog.csdn.net/weixin_42171170/article/details/94473176
提到LUT,很多人可能都会觉得这是一个很专业很高深的词汇,LUT其实就是Lookup Table(颜色查找表)的缩写,简单点儿理解就是:通过LUT,你可以将一组RGB值输出为另一组RGB值,从而改变画面的曝光与色彩。用一个最简单的模型帮助大家理解就是:
如果我们规定:
当原始R值为0时,输出R值为5;
当原始R值为1时,输出R值为6;
当原始R值为2时,输出R值为8;
当原始R值为3时,输出R值为10;
...
一直到R值为255
当原始G值为0时,输出G值为10;
当原始G值为1时,输出G值为12;
当原始G值为2时,输出G值为13;
当原始G值为3时,输出G值为15;
...
一直到G值为255
当原始B值为0时,输出B值为0;
当原始B值为1时,输出B值为0;
当原始B值为2时,输出B值为1;
当原始B值为3时,输出B值为1;
...
一直到B值为255
那么,如果一个像素为RGB(1,2,3),那么它应用这个LUT之后的输出值就是RGB(6,13,1),以此类推,我们就可以把所有原始RGB值转化为输出RGB值。当然在实际的3D LUT转换中,算法要比这复杂很多。
原文链接:http://www.sohu.com/a/230989286_252971
还有一篇参考文章:https://blog.csdn.net/Rothwale/article/details/79189032