Python PIL/numpy 转换
Python PIL/numpy conversion
我在 python PIL 图像和 numpy 数组之间转换时遇到问题。我已经检查了关于此的现有 Whosebug 帖子,但它并没有解决问题:
import matplotlib.pyplot as plt
import numpy as np
import PIL
rgb_img = plt.imread('some-image.png')
PIL_rgb_img = PIL.Image.fromarray(np.uint8(rgb_img))
plt.imshow(PIL_rgb_img)
我遇到黑屏。我尝试过转换为 uint8 和不转换为 uint8,我还尝试只将 RGB 通道保留在整个 RGBA 数据之外。没有任何效果。
我可能不会给你一个完整的解释,(为此,你可以阅读 matplotlib 的函数文档)但显然通过一些测试会发生以下情况:
当你打电话时:
rgb_img = plt.imread('img.png')
它给出了一个 numpy 浮点数组,它将 [0 - 1] 之间的颜色读取为白色和黑色(对于 RGB 也是如此)
当你打电话时:
PIL_rgb_img = PIL.Image.fromarray(np.uint8(rgb_img))
将其转换为 uint8
值,它只是将应该为 255 的值变成 1
,这是完全错误的,
你知道 uint8
中的值应该在 [0 - 255]
之间
当你输入时:
plt.imshow(PIL_rgb_img)
它只显示了 255 倍 'faded' 图像,非常接近黑色..
P。 S.:
只有“.png”文件才会出现这种情况,
plt.imread
..
的东西
解决只是把:
img = 'some_img.png'
rgb_img = plt.imread(img)
if img.split('.')[-1]=='png':
PIL_rgb_img = PIL.Image.fromarray(np.uint8(rgb_img*255))
else:
PIL_rgb_img = PIL.Image.fromarray(np.uint8(rgb_img))
plt.imshow(PIL_rgb_img)
这应该可以解决。
from PIL import Image
import numpy as np
#PIL to Numpy
pil_img = Image.open('some-image.png')
numpy_img = np.asarray(pil_img)
#Numpy to PIL
resultImage = Image.fromarray(numpy_img)
我在 python PIL 图像和 numpy 数组之间转换时遇到问题。我已经检查了关于此的现有 Whosebug 帖子,但它并没有解决问题:
import matplotlib.pyplot as plt
import numpy as np
import PIL
rgb_img = plt.imread('some-image.png')
PIL_rgb_img = PIL.Image.fromarray(np.uint8(rgb_img))
plt.imshow(PIL_rgb_img)
我遇到黑屏。我尝试过转换为 uint8 和不转换为 uint8,我还尝试只将 RGB 通道保留在整个 RGBA 数据之外。没有任何效果。
我可能不会给你一个完整的解释,(为此,你可以阅读 matplotlib 的函数文档)但显然通过一些测试会发生以下情况:
当你打电话时:
rgb_img = plt.imread('img.png')
它给出了一个 numpy 浮点数组,它将 [0 - 1] 之间的颜色读取为白色和黑色(对于 RGB 也是如此)
当你打电话时:
PIL_rgb_img = PIL.Image.fromarray(np.uint8(rgb_img))
将其转换为 uint8
值,它只是将应该为 255 的值变成 1
,这是完全错误的,
你知道 uint8
中的值应该在 [0 - 255]
当你输入时:
plt.imshow(PIL_rgb_img)
它只显示了 255 倍 'faded' 图像,非常接近黑色..
P。 S.:
只有“.png”文件才会出现这种情况,
plt.imread
..
解决只是把:
img = 'some_img.png'
rgb_img = plt.imread(img)
if img.split('.')[-1]=='png':
PIL_rgb_img = PIL.Image.fromarray(np.uint8(rgb_img*255))
else:
PIL_rgb_img = PIL.Image.fromarray(np.uint8(rgb_img))
plt.imshow(PIL_rgb_img)
这应该可以解决。
from PIL import Image
import numpy as np
#PIL to Numpy
pil_img = Image.open('some-image.png')
numpy_img = np.asarray(pil_img)
#Numpy to PIL
resultImage = Image.fromarray(numpy_img)