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.
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:
Applying gamma of value 0.5 will yield:
Applying gamma of value 1.5 will yield:
Applying gamma of value 2.5 will yield:
Applying gamma of value 1.0 will yield the same image.
Code was borrowed from this link
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…