Python 修改非均匀图像中图像的亮度
是否存在以非均匀方式修改图像亮度的方法?我的意思是,图像的每个像素都被修改了不同的大小。我使用的是python的函数。如果有办法的话,我不介意使用Opencv OpenCV的本机格式是numpy数组,因此我们可以通过将相同大小和形状的数组减去(或乘以@Mark Setchel建议的分数值)来处理图像 获取原始图像:Python 修改非均匀图像中图像的亮度,python,opencv,image-processing,pillow,pixels,Python,Opencv,Image Processing,Pillow,Pixels,是否存在以非均匀方式修改图像亮度的方法?我的意思是,图像的每个像素都被修改了不同的大小。我使用的是python的函数。如果有办法的话,我不介意使用Opencv OpenCV的本机格式是numpy数组,因此我们可以通过将相同大小和形状的数组减去(或乘以@Mark Setchel建议的分数值)来处理图像 获取原始图像: import cv2 import numpy as np color_img = cv2.imread('cat.jpg') cv2.imshow("Cat"
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
之前:
之后
要转换回PIL,请执行以下操作:
from PIL import Image
im = Image.fromarray(color_image_u8)
你可以用你喜欢的任何方式手动修改每个像素,但通常这种像素方式效率不高。我正在处理10万张图像提供有关所需亮度多样性的一些信息(所有像素的不同值等)和其他参数,如图像大小等,你能上传一个样本输入和预期输出吗?输入图像是彩色的还是灰度的?你所说的图像中的区域是什么意思?生成一个大小相同的随机浮点数都小于一的图像。把你的形象乘以它。结果会更暗。非常感谢您对这个详细解释的答案。我用一个随机数组乘以了我的图像,但是我不能再显示它了,因为我得到了这个错误:“numpy.ndarray”对象没有属性“show”。有什么想法吗?当然,如果你想使用img.show()
,你需要转换回PIL图像。查看我的编辑,但它只是图像。fromarray
我很抱歉,但是知道怎么做吗?从PIL导入图像
,然后im=Image.fromarray(color\u Image\u u8)