python cv2改变图片亮度

使用Gamma校正来改变图片亮度

import cv2
import numpy as np
def gamma_trans(img,gamma):#gamma大于1时图片变暗,小于1图片变亮
	#具体做法先归一化到1,然后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)
	#实现映射用的是Opencv的查表函数
	return cv2.LUT(img,gamma_table)
img = cv2.imread('000011.jpg', cv2.IMREAD_COLOR)    # 打开文件
 
# 执行Gamma矫正,小于1的值让暗部细节大量提升,同时亮部细节少量提升
img_corrected = gamma_trans(img, 0.5)
cv2.imshow('a1',img_corrected)
cv2.imshow('as1',img)
img_corrected = gamma_trans(img, 2)
cv2.imshow('a1g',img_corrected)
cv2.waitKey(0)


https://blog.csdn.net/xiaogao_47/article/details/90261010

线性改变亮度

def liner_trans(img,gamma):#gamma大于1时图片变亮,小于1图片变暗
    img=np.float32(img)*gamma//1
    img[img>255]=255
    img=np.uint8(img)
    return img
import os
import math
from PIL import Image, ImageStat, ImageEnhance
import sys

# 读取图片原有的亮度值
def brightness(path):
    im = Image.open(path)
    stat = ImageStat.Stat(im)
    r,g,b = stat.mean
    return math.sqrt(0.241*(r**2) + 0.691*(g**2) + 0.068 *(b**2))


# 获取文件亮度平均值
def brightness_avg(path):
    os.chdir(path)
    sum = 0.0
    img_len = len(os.listdir())
    for name_list_image in os.listdir():
        if name_list_image.endswith(".jpg"):
            image_url = os.getcwd()+'/'+name_list_image
            b = brightness(image_url)
            sum+=b
            print('%s=%s' %(image_url,b))
    avg = sum/img_len
    return avg



# 设置图片亮度
def set_brightness(b_avg,dir):
    for name_list_image in os.listdir():
        if name_list_image.endswith(".jpg"):
            image_url = os.getcwd()+'/'+name_list_image
            im = Image.open(image_url)
            im = ImageEnhance.Brightness(im).enhance(b_avg / brightness(image_url))
            # dir = r'C:\Users\Smart\Desktop\image\new'
            flag=os.path.exists(dir)
            if not flag:
                os.mkdir(dir)
            im.save(dir+'/'+name_list_image)


def main(path,dir):
    # b_avg = brightness_avg(path)
    # print(b_avg)
    b_avg=50
    set_brightness(b_avg,dir)



if __name__ == "__main__":
    # path = r'图片文件路径'
    # dir = r'图片处理后的文件路径'
    path='.'
    dir='2'
    # for i in range(1, len(sys.argv)):
    #     path = sys.argv[i]
    #     dir = sys.argv[i+1]
    #     break
    main(path,dir)

更多
更多内容请关注公众号,了解嵌入式ai前沿资讯!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值