gpt4 book ai didi

python - 将图像转换为不同类的 PIL

转载 作者:行者123 更新时间:2023-12-01 09:19:53 29 4
gpt4 key购买 nike

我正在使用 PIL 并尝试在图像上使用中值滤波器来对其进行降噪。但当我尝试时,结果是黑色图像。我认为问题的原因是图像属于“PIL.Image.Image”类。

让我更深入地解释一下我正在做什么/这个问题。我必须使用 numpy 执行一些图像操作。为了做到这一点,我首先必须将 PIL 图像转换为 numpyArray。我使用以下代码完成了此操作:

img = np.array(image)

执行所需的转换后,我使用以下代码将图像转换回 PIL:

def numpy_to_pil(image):
minv = np.amin(image)
maxv = np.amax(image)
img = Image.fromarray((255 * (image - minv) / (maxv - minv)).astype(np.uint8))
return img

当我尝试使用中值滤波器过滤“img”时,如前所述,结果是黑色图像。这是我使用PIL的过滤功能的方法:

img.filter(ImageFilter.MedianFilter(3))

我尝试将结果与未经过“img”经过的类型转换过程的图像(我们称之为“猫”(字面意思是猫的图像))进行比较。我尝试打印出类型来看看有什么不同。这是结果:

cat =  <class 'PIL.PngImagePlugin.PngImageFile'>
img = <class 'PIL.Image.Image'>

看到这个我想知道问题是否是“img”的类型是“PIL.Image.Image”而不是“PIL.PngImagePlugin.PngImageFile”。我在将 numpyArray 转换为 PIL 时做错了什么吗?或者是别的什么。

非常感谢任何帮助! (我尝试尽可能具体)

P.S:噪音的类型是椒盐P.P.S:我尝试使用 img.convert('PIL.PngImagePlugin.PngImageFile') 但它输出以下错误:

conversion from RGB to PIL.PngImagePlugin.PngImageFile not supported

最佳答案

这一步发生了很多事情:(255 * (image - minv)/(maxv - minv)).astype(np.uint8)

该图像的数据类型为 uint8,因此当您先乘以 255 时,就会超出 8 位整数的最大值。您可以将数据类型更改为 int64 或打破这些步骤,数据类型将提前为您转换。

如果你打破这些步骤并最后乘以 255,它就不再因为溢出 8 位整数而给出黑屏:

minv = np.amin(image)
maxv = np.amax(image)
image = image - minv
image = image / (maxv - minv)
image = image * 255
img = Image.fromarray(image.astype(np.uint8))

关于python - 将图像转换为不同类的 PIL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50880843/

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