修改非均匀图像的亮度
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)
有没有办法以非均匀的方式修改图像的亮度?我的意思是图像的每个像素都使用不同的 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)