修改非均匀图像的亮度

时间:2018-07-17 13:25:04

标签: python opencv image-processing pillow pixels

是否总会以非均匀的方式修改图像的亮度?我的意思是图像的每个像素都被修改了不同的幅度。我正在使用python的功能枕头。如果有办法,我不介意用Opencv来做。

1 个答案:

答案 0 :(得分:0)

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之间的数字),您不必担心溢出或削波,只需确保在乘以{{1之后,再转换回uint8 }}。

之前:

Before

之后

After

要转换回PIL:

float