Image.save() 和 Image.show() 对同一图像给出不同的结果
Image.save() And Image.show() Gives Different Result For same Image
我有一个 python 脚本,它将图像作为输入并为图像添加一些效果。添加效果后我正在保存图像,这给了我 100% 正确的结果。但是如果对我之前保存的同一张图片执行 img.show() 它会显示输入图片而不是添加效果的图片。代码如下
import numpy as np
from PIL import Image
img = Image.open("1.png").convert('RGBA')
arr = np.array(img)
alpha = arr[:, :, 3]
n = len(alpha)
alpha[:] = np.interp(np.arange(n), [0, 0.55*n, 0.75*n, n], [255, 255, 0, 0])[:,np.newaxis]
img = Image.fromarray(arr, mode='RGBA')
img.save("2.png")
img.show()
我猜是因为两次都没有使用同一个图像查看器。 img.show() 使用一些不同的图像查看器。尝试使用相同的图像查看器两次顶部打开。
我认为奇怪的不是您显示的图像与原始图像相同,而是您保存的图像不同。您正在从变量 arr
中设置 img2
,该变量取自 img1
,并且从未更改过。您应该在创建 img2
.
之前设置 arr[:,:,3] = alpha
示例:
>>> import numpy as np
>>> a = np.array([[1,1],[2,2]])
>>> a
array([[1, 1],
[2, 2]])
>>> b = a[:,1]
>>> b
array([1, 2])
>>> b = [0,3]
>>> a
array([[1, 1],
[2, 2]])
>>> a[:,1] = b
>>> a
array([[1, 0],
[2, 3]])
我有一个 python 脚本,它将图像作为输入并为图像添加一些效果。添加效果后我正在保存图像,这给了我 100% 正确的结果。但是如果对我之前保存的同一张图片执行 img.show() 它会显示输入图片而不是添加效果的图片。代码如下
import numpy as np
from PIL import Image
img = Image.open("1.png").convert('RGBA')
arr = np.array(img)
alpha = arr[:, :, 3]
n = len(alpha)
alpha[:] = np.interp(np.arange(n), [0, 0.55*n, 0.75*n, n], [255, 255, 0, 0])[:,np.newaxis]
img = Image.fromarray(arr, mode='RGBA')
img.save("2.png")
img.show()
我猜是因为两次都没有使用同一个图像查看器。 img.show() 使用一些不同的图像查看器。尝试使用相同的图像查看器两次顶部打开。
我认为奇怪的不是您显示的图像与原始图像相同,而是您保存的图像不同。您正在从变量 arr
中设置 img2
,该变量取自 img1
,并且从未更改过。您应该在创建 img2
.
arr[:,:,3] = alpha
示例:
>>> import numpy as np
>>> a = np.array([[1,1],[2,2]])
>>> a
array([[1, 1],
[2, 2]])
>>> b = a[:,1]
>>> b
array([1, 2])
>>> b = [0,3]
>>> a
array([[1, 1],
[2, 2]])
>>> a[:,1] = b
>>> a
array([[1, 0],
[2, 3]])