Spaces:
Runtime error
Runtime error
import numpy as np | |
import cv2 | |
from PIL import Image | |
# def read_img(image_path): | |
# img = cv2.imread(image_path) | |
# img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) | |
# assert len(img.shape)==3 | |
# return img | |
def read_img(image_file_buffer): | |
img = Image.open(image_file_buffer).convert('RGB') | |
img = np.array(img) | |
assert len(img.shape)==3 | |
return img | |
# Calculates the average brightness in the specified irregular image | |
def calculate_average_brightness(img): | |
# Average value of three color channels | |
R = img[..., 0].mean() | |
G = img[..., 1].mean() | |
B = img[..., 2].mean() | |
brightness = 0.299 * R + 0.587 * G + 0.114 * B | |
return brightness, B, G, R | |
# Adjusting the average brightness of the target image to the average brightness of the source image | |
def adjust_brightness_from_src_to_dst(dst, src,path=None,if_show=None, if_info=None): | |
brightness1, B1, G1, R1 = calculate_average_brightness(src) | |
brightness2, B2, G2, R2 = calculate_average_brightness(dst) | |
brightness_difference = brightness1 / brightness2 | |
if if_info: | |
print('Average brightness of original image', brightness1) | |
print('Average brightness of target', brightness2) | |
print('Brightness Difference between Original Image and Target', brightness_difference) | |
# According to the average display brightness | |
dstf = dst * brightness_difference | |
# According to the average value of the three-color channel | |
# dstf = dst.copy().astype(np.float32) | |
# dstf[..., 0] = dst[..., 0] * (B1 / B2) | |
# dstf[..., 1] = dst[..., 1] * (G1 / G2) | |
# dstf[..., 2] = dst[..., 2] * (R1 / R2) | |
# To limit the results and prevent crossing the border, | |
# it must be converted to uint8, otherwise the default result is float32, and errors will occur. | |
dstf = np.clip(dstf, 0, 255) | |
dstf = np.uint8(dstf) | |
ma,na,_ = src.shape | |
mb,nb,_ = dst.shape | |
result_show_img = np.zeros((max(ma, mb), 3 * max(na, nb), 3)) | |
result_show_img[:mb, :nb, :] = dst | |
result_show_img[:ma, nb:nb + na, :] = src | |
result_show_img[:mb, nb + na:nb + na + nb, :] = dstf | |
result_show_img = result_show_img.astype(np.uint8) | |
if if_show: | |
cv2.imshow('-', cv2.cvtColor(result_show_img, cv2.COLOR_BGR2RGB)) | |
cv2.waitKey(0) | |
cv2.destroyAllWindows() | |
if path != None: | |
cv2.imwrite(path, cv2.cvtColor(result_show_img, cv2.COLOR_BGR2RGB)) | |
return dstf | |