Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 修改非均匀图像中图像的亮度_Python_Opencv_Image Processing_Pillow_Pixels - Fatal编程技术网

Python 修改非均匀图像中图像的亮度

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"

是否存在以非均匀方式修改图像亮度的方法?我的意思是,图像的每个像素都被修改了不同的大小。我使用的是python的函数。如果有办法的话,我不介意使用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

之前:

之后

要转换回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)