import os
import cv2
import numpy as np
import traceback
path = 'xxxxxx' #输入图像路径
save_path = 'xxxxxxxxxx' #保存图像路径
if not os.path.exists(save_path):
os.makedirs(save_path)
def brightness_increase(input_img, a_limit=10, b_target=90):
"""
亮度增强
:param input_img: 输入图像
:param a_limit: 判断限制图像亮暗度,小于此值则进行亮度调整
:param b_target: 调整后的目标亮度值
:return: 格式和输入相同
"""
output_img = input_img
try:
if input_img is None:
print('input_img is None !')
elif a_limit < 0 or a_limit > 255:
print('a_limit 必须在 0-255 之间')
elif b_target < 0 or b_target > 255:
print('b_target 必须在 0-255 之间')
else:
stdmean = np.mean(input_img)
if stdmean <= a_limit:
output_img = cv2.convertScaleAbs(input_img, alpha=a_limit / stdmean, beta=0).astype(np.uint8)
except:
print(traceback.print_exc())
return output_img
def clahe_equalized(input_img, limit=2.0, size=(8, 8)):
"""
自适应直方图均衡化
:param input_img:
:param limit:
:param size:
:return:
"""
dst_img = input_img
try:
if input_img is not None:
if input_img.shape[0] > 1:
clahe = cv2.createCLAHE(clipLimit=limit, tileGridSize=size)
dst_img = clahe.apply(input_img)
except:
print(traceback.print_exc())
return dst_img
info_all = os.listdir(path)
for info in info_all:
if info.endswith('.png') or info.endswith('.jpg'):
img_data_01 = cv2.imread(os.path.join(path, info), 0)
h = img_data_01.shape[0]
w = img_data_01.shape[1]
name, type_ = info.split('.')[0], info.split('.')[1]
img_data_01 = brightness_increase(img_data_01, a_limit=20, b_target=90)
# 自适应直方图均衡化
img_data_01 = clahe_equalized(img_data_01, limit=2.0, size=(8, 8))
# 图像转为彩色图像
img_data_01 = cv2.cvtColor(img_data_01, cv2.COLOR_GRAY2RGB)
cv2.imwrite(os.path.join(save_path, info), img_data_01)
效果如下图所示: