I know I am late, but I would suggest using gamma correction.
Now what is gamma correction?
I will make it clear in layman's terms:
- To display image on a screen, input voltage is needed.
- This voltage is output as light intensity.
- In perfect world, input voltage would be linear to output intensity.
- But the real screen output is close to an exponential curve, the
exponent being gamma.
Since the computer screen applies a gamma value to the image on screen, the process of applying inverse gamma to counter this effect is called gamma correction.
![enter image description here](https://i.stack.imgur.com/E08Q9.jpg)
Here is the code for the same using OpenCV 3.0.0 and python:
import cv2
import numpy as np
def adjust_gamma(image, gamma=1.0):
invGamma = 1.0 / gamma
table = np.array([((i / 255.0) ** invGamma) * 255
for i in np.arange(0, 256)]).astype("uint8")
return cv2.LUT(image, table)
x = 'C:/Users/524316/Desktop/stack/test.jpg' #location of the image
original = cv2.imread(x, 1)
cv2.imshow('original',original)
gamma = 0.5 # change the value here to get different result
adjusted = adjust_gamma(original, gamma=gamma)
cv2.putText(adjusted, "g={}".format(gamma), (10, 30),cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 3)
cv2.imshow("gammam image 1", adjusted)
cv2.waitKey(0)
cv2.destroyAllWindows()
Here is the original image:
![enter image description here](https://i.stack.imgur.com/UfwG3.jpg)
Applying gamma of value 0.5 will yield:
![enter image description here](https://i.stack.imgur.com/auRwm.jpg)
Applying gamma of value 1.5 will yield:
![enter image description here](https://i.stack.imgur.com/APOGg.jpg)
Applying gamma of value 2.5 will yield:
![enter image description here](https://i.stack.imgur.com/nokdc.jpg)
Applying gamma of value 1.0 will yield the same image.
Code was borrowed from this link
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…