[英]Gamma correction with Pillow Image turning to Grayscale
尝试在仪表板应用程序中对图像执行伽马校正。 但经过我的 function 后,原始彩色图像变为灰度。 我使用 Pillow Image.new("P", ...)
作为颜色而不是 "L" 用于灰度。 如果我使用Image.new("RGB",...)
返回的图像是红色的。 请帮忙。
def gamma_correct(gamma, url):
im = Image.open(requests.get(url, stream=True).raw)
gamma1 = gamma
row = im.size[0]
col = im.size[1]
result_img1 = Image.new("RGB", (row, col))
for x in range(1 , row):
for y in range(1, col):
r = pow(im.getpixel((x,y))[0]/255, (1/gamma1))*255
g = pow(im.getpixel((x,y))[1]/255, (1/gamma1))*255
b = pow(im.getpixel((x,y))[2]/255, (1/gamma1))*255
result_img1.putpixel((x,y)[0], int(r))
result_img1.putpixel((x,y)[1], int(g))
result_img1.putpixel((x,y)[2], int(b))
请记住“P”和“RGB”是不一样的。 P 是调色板模式,仅限于 256 种颜色。
彩色图像具有以下维度:(宽度、高度、通道),通道通常 = 3。
似乎您正在保存图像,所有颜色值都在一个通道中,这意味着您最终会得到一个通道 = 1 的图像,例如 (width, tall, channels)。这也是您在以下情况下获得红色图像的原因您使用 Image.new("RGB",...),因为您的图像仅在第一个通道 (R) 中具有数据
@ChristophRackwitz 在他的两个评论中都是正确的。 大多数情况下,处理图像的库实际上会处理尺寸(高度、宽度、通道),因此如果您从磁盘加载图像,例如 (1920,1080,3),memory 中的 object 实际上具有尺寸 (1080,1920 ,3)。 此外,一些软件(如 opencv)甚至默认将通道视为 BGR 而不是 RGB
RGB 图像有 3 个通道,它们是每种颜色的值。 这意味着对于图像中的每个像素,有3 个颜色值,一个用于红色通道 (R),一个用于绿色 (G),一个用于蓝色 (B)
尝试调试图像修改过程,即:
for x in range(1 , row):
for y in range(1, col):
print(im.getpixel(x,y))
r = pow(im.getpixel((x,y))[0]/255, (1/gamma1))*255
g = pow(im.getpixel((x,y))[1]/255, (1/gamma1))*255
b = pow(im.getpixel((x,y))[2]/255, (1/gamma1))*255
print(im.getpixel(x,y))
两个打印语句将打印一个 3 维数组。 检查每个通道的值是否符合预期,无论是之前还是之后
兄弟,错误是您只将一个通道(即 R)参数传递给 putpixel() 方法。 您需要传递一个 RGB 值的元组。
def gamma_correct(gamma, path):
im = Image.open(path)
gamma1 = gamma
row = im.size[0]
col = im.size[1]
result_img1 = Image.new(mode="RGB", size=(row, col), color=0)
for x in range(row):
for y in range(col):
r = pow(im.getpixel((x, y))[0] / 255, (1 / gamma1)) * 255
g = pow(im.getpixel((x, y))[1] / 255, (1 / gamma1)) * 255
b = pow(im.getpixel((x, y))[2] / 255, (1 / gamma1)) * 255
# add
color = (int(r), int(g), int(b))
result_img1.putpixel((x, y), color)
#show
result_img1.show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.