随笔 - 1762  文章 - 0  评论 - 109  阅读 - 431万

opencv图像处理之gamma变换

 

复制代码
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


 

posted on   一杯明月  阅读(8392)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示