gpt4 book ai didi

python - 使用 PIL 和 NumPy 将图像转换为 Lab 数组,修改值然后转换回来

转载 作者:太空狗 更新时间:2023-10-29 17:17:47 25 4
gpt4 key购买 nike

我正在尝试使用 NumPy 将 PIL 图像转换为数组。然后我想将该数组转换为 Lab 值,修改值,然后将数组转换回图像并保存图像。我有以下代码:

import Image, color, numpy

# Open the image file
src = Image.open("face-him.jpg")

# Attempt to ensure image is RGB
src = src.convert(mode="RGB")

# Create array of image using numpy
srcArray = numpy.asarray(src)

# Convert array from RGB into Lab
srcArray = color.rgb2lab(srcArray)

# Modify array here

# Convert array back into Lab
end = color.lab2rgb(srcArray)

# Create image from array
final = Image.fromarray(end, "RGB")

# Save
final.save("out.jpg")

此代码依赖于 PIL、NumPy 和color。颜色可以在 SciPy 主干中找到 here .我下载了 color.py 文件以及某些 colordata .txt files .我修改了 color.py,以便它可以独立于 SciPy 源运行,而且它似乎都可以正常工作 - 当我运行转换时,数组中的值会发生变化。

我的问题是,当我运行上面的代码将图像简单地转换为 Lab,然后再转换回 RGB 并保存时,我得到以下图像:

alt text

出了什么问题?我使用的是 color.py 中的函数吗?

供引用:
源图像 - face-him.jpg
测试所需的所有源文件 - colour-test.zip

最佳答案

没有尝试过,缩放错误在转换颜色时很常见:
RGB 是字节 0 .. 255,例如黄色 [255,255,0],而 rgb2xyz() 等处理黄色 float 的三元组 [1.,1.,0]。
(color.py 没有范围检查:lab2rgb( rgb2lab([255,255,0]) ) 是垃圾。)

在 IPython 中,%run main.py,然后打印 srcArray 的角并结束 ?

7 月 13 日添加:为了记录/为了谷歌,这里是用于打包、解包和转换 RGB 图像数组的 NumPy 习语:

    # unpack image array, 10 x 5 x 3 -> r g b --
img = np.arange( 10*5*3 ).reshape(( 10,5,3 ))
print "img.shape:", img.shape
r,g,b = img.transpose( 2,0,1 ) # 3 10 5
print "r.shape:", r.shape

# pack 10 x 5 r g b -> 10 x 5 x 3 again --
rgb = np.array(( r, g, b )).transpose( 1,2,0 ) # 10 5 3 again
print "rgb.shape:", rgb.shape
assert (rgb == img).all()

# rgb 0 .. 255 <-> float 0 .. 1 --
imgfloat = img.astype(np.float32) / 255.
img8 = (imgfloat * 255).round().astype(np.uint8)
assert (img == img8).all()

关于python - 使用 PIL 和 NumPy 将图像转换为 Lab 数组,修改值然后转换回来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3228361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com