python+cv2实现自动gamma校正(自动!)

找了很久的资料,关于python的gamma校正很多,找不到自动的方法,也可能是自己过于菜

通过C版本的OPENCV的自动gamma校正找到了相关算法:

gamma值计算:

gamma_val = math.log10(0.5)/math.log10(mean/255)

结果图(image_raw为原图,image_gamma为校正图):

(曝光不足的)

(曝光过度的,可能产生部分失真的情况,视曝光严重程度而定)

代码:

import cv2
import numpy as np
import math

def gamma_trans(img, gamma):  # gamma函数处理
    gamma_table = [np.power(x / 255.0, gamma) * 255.0 for x in range(256)]  # 建立映射表
    gamma_table = np.round(np.array(gamma_table)).astype(np.uint8)  # 颜色值为整数
    return cv2.LUT(img, gamma_table)  # 图片颜色查表。另外可以根据光强(颜色)均匀化原则设计自适应算法。

def nothing(x):
    pass

file_path = "./dataset/1/7.jpg"
img_gray=cv2.imread(file_path,0)   # 灰度图读取,用于计算gamma值
img = cv2.imread(file_path)    # 原图读取

mean = np.mean(img_gray)
gamma_val = math.log10(0.5)/math.log10(mean/255)    # 公式计算gamma

image_gamma_correct = gamma_trans(img, gamma_val)   # gamma变换

# print(mean,np.mean(image_gamma_correct))

cv2.imshow('image_raw', img)
cv2.imshow('image_gamma', image_gamma_correct)
cv2.waitKey(0)

 

  • 17
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值