如何在opencv python中更改图像照明

use*_*624 6 python opencv

我在python opencv中读取图像,现在我需要将此图像上的照明更改为更暗或更亮,我应该使用哪种方法来启用此功能?

Jer*_*uke 15

我知道我迟到了,但我建议使用伽玛校正.

现在什么是伽马校正

我将以外行的方式说清楚:

  • 要在屏幕上显示图像,需要输入电压.
  • 该电压作为光强度输出.
  • 在完美的世界中,输入电压与输出强度成线性关系.
  • 但实际屏幕输出接近指数曲线,指数为伽玛.

由于计算机屏幕将伽玛值应用于屏幕上的图像,因此应用反伽马来对抗该效果的过程称为伽马校正.

在此输入图像描述

以下是使用OpenCV 3.0.0和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()
Run Code Online (Sandbox Code Playgroud)

这是原始图像:

在此输入图像描述

应用值为0.5的gamma将产生:

在此输入图像描述

应用值为1.5的gamma将产生:

在此输入图像描述

应用值为2.5的gamma将产生:

在此输入图像描述

应用值为1.0的伽玛将产生相同的图像.


Rah*_*K P 5

我认为你可以用 opencv 来做到这一点。这是我的建议

import cv2
import numpy as np

img1 = cv2.imread('abc.jpg')
a = np.double(img1)
b = a + 15
img2 = np.uint8(b)
cv2.imshow("frame",img1)
cv2.imshow("frame2",img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

这里我增加了图像的亮度。如果你使用减法,就会变得更暗。