Вы можете использовать алгоритм адаптивной коррекции, такой как CLAHE . Вот минимальный рабочий пример:
import cv2
image = cv2.imread('original.jpg')
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
b = clahe.apply(image[:, :, 0])
g = clahe.apply(image[:, :, 1])
r = clahe.apply(image[:, :, 2])
equalized = np.dstack((b, g, r))
cv2.imwrite('equalized.jpg', equalized)