图像gamma变换 matlab,opencv图像处理之gamma变换

importcv2importnumpy 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")returncv2.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

你可能感兴趣的:(图像gamma变换,matlab)