gpt4 book ai didi

python - 在 Pillow 中调整 SRGB 感知图像大小

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

Pillow 的基本Image.resize函数似乎没有任何 SRGB 感知过滤选项。有没有办法在 Pillow 中进行 SRGB 感知调整大小?

我可以通过将图像转换为 float 并自己应用 SRGB 变换来手动完成此操作...但我希望有一种内置方法。

最佳答案

我最终使用以下例程实现了 sRGB 感知调整大小。它需要一个 8 位 RGB 图像和一个目标大小和重采样过滤器。

from PIL import Image
import numpy as np

def SRGBResize(im, size, filter):
# Convert to numpy array of float
arr = np.array(im, dtype=np.float32) / 255.0
# Convert sRGB -> linear
arr = np.where(arr <= 0.04045, arr/12.92, ((arr+0.055)/1.055)**2.4)
# Resize using PIL
arrOut = np.zeros((size[1], size[0], arr.shape[2]))
for i in range(arr.shape[2]):
chan = Image.fromarray(arr[:,:,i])
chan = chan.resize(size, filter)
arrOut[:,:,i] = np.array(chan).clip(0.0, 1.0)
# Convert linear -> sRGB
arrOut = np.where(arrOut <= 0.0031308, 12.92*arrOut, 1.055*arrOut**(1.0/2.4) - 0.055)
# Convert to 8-bit
arrOut = np.uint8(np.rint(arrOut * 255.0))
# Convert back to PIL
return Image.fromarray(arrOut)

关于python - 在 Pillow 中调整 SRGB 感知图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31300865/

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