根据OpenCV Gamma Correction的说法,我们可以通过OpenCV的LUT()来调整整个图像的灰度
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)我想知道是否有可能做部分伽马校正?
例如,这是一个曝光不足的玩偶:

我只想调整玩偶的灰度,并保持其他部分不变。

我读过official doc of OpenCV,似乎没有指定特定图像的局部位置的参数。
发布于 2020-03-05 17:05:21
你可以将图像的Numpy切片传递给你的函数,但你会在边缘周围得到一个丑陋的不连续。
#!/usr/bin/env python3
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)
image = cv2.imread('doll.jpg')
image[200:1600, 800:2100] = adjust_gamma(image[200:1600, 800:2100], 3)

https://stackoverflow.com/questions/60540494
复制相似问题