DIGIMAP-Group4-Animefy / adjust_brightness.py
Shue's picture
added Animefy web app files.
421360e
raw
history blame
No virus
2.42 kB
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