修改非均匀图像的亮度

modify the brightness of a an image in a non-homogeneous

有没有办法以非均匀的方式修改图像的亮度?我的意思是图像的每个像素都使用不同的 magnitude.I am using python's function pillow 进行修改。如果有办法,我不介意用 Opencv 来做。

OpenCV 的本机格式是一个 numpy 数组,因此我们可以通过将相同大小和形状的数组减去(或乘以@Mark Setchel 建议的分数值)来根据需要操作图像。

获取原图:

import cv2
import numpy as np

color_img = cv2.imread('cat.jpg')
cv2.imshow("Cat", color_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
print(color_img.shape)

创建相同大小和形状的随机数组:

result = np.random.randint(10, 60, size=color_img.shape, dtype='uint8')

转换 uint8 以防止溢出:

color_img32 = np.asarray(color_img, dtype="int32")

减去我们的数组:

color_img32 -= result

确保一切都在 0 到 255 之间并转换回 uint8:

color_img32 = np.clip(color_img32, 0, 255)
color_image_u8 = color_img32.astype('uint8')
cv2.imshow("Cat", color_image_u8)

cv2.waitKey(0)
cv2.destroyAllWindows()

请注意,使用乘法(乘以 0 到 1 之间的数字)您不必担心溢出或裁剪,只需确保在乘以 [ 后转换回 uint8 =19=].

之前:

之后

要转​​换回 PIL:

from PIL import Image
im = Image.fromarray(color_image_u8)