我在python PIL图像和numpy数组之间转换时遇到问题。我已经检查了现有的Stackoverflow帖子,但它没有解决问题:
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,我也尝试仅将RGB通道保留在整个RGBA数据之外。没有任何效果。
答案 0 :(得分:1)
我可能不会给你一个完整的解释,(为此,你可以阅读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次'褪色'图像,非常接近黑色..
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)
应该修复它。
答案 1 :(得分:1)
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)