将图像投射到不同的类PIL

2024-09-22 16:40:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用PIL,并尝试使用中值滤波器对图像进行去噪处理。但当我尝试时,结果是一个黑色的图像。我认为问题的原因是这个形象是一流的PIL.Image.Image'. 在

让我更深入地解释一下我在做什么/这个问题。我不得不用numpy进行一些图像处理。为了做到这一点,我首先不得不将PIL图像投射到numpyArray上。我用下面的代码做了这个:

img = np.array(image)

在完成所需的转换后,我使用以下代码将图像投射回PIL:

^{pr2}$

如前所述,当我尝试用中值滤波器过滤“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'. 我是不是做错了什么从纽普亚雷到皮尔的角色?或者是别的什么。在

非常感谢任何帮助!(我尽量说得具体些)

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

conversion from RGB to PIL.PngImagePlugin.PngImageFile not supported


Tags: 代码图像imagenumpy类型imgpil图片
1条回答
网友
1楼 · 发布于 2024-09-22 16:40:48

这一步有很多事情要做:(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))

相关问题 更多 >