我如何将PIL图像来回转换为NumPy数组,以便我可以比PIL的PixelAccess更快地进行逐像素转换?我可以通过以下方式将其转换为NumPy数组:
pic = Image.open("foo.jpg")
pix = numpy.array(pic.getdata()).reshape(pic.size[0], pic.size[1], 3)
但我如何加载它回到PIL图像后,我已经修改了数组?picture .putdata()工作不正常。
我如何将PIL图像来回转换为NumPy数组,以便我可以比PIL的PixelAccess更快地进行逐像素转换?我可以通过以下方式将其转换为NumPy数组:
pic = Image.open("foo.jpg")
pix = numpy.array(pic.getdata()).reshape(pic.size[0], pic.size[1], 3)
但我如何加载它回到PIL图像后,我已经修改了数组?picture .putdata()工作不正常。
当前回答
我今天用的例子是:
import PIL
import numpy
from PIL import Image
def resize_image(numpy_array_image, new_height):
# convert nympy array image to PIL.Image
image = Image.fromarray(numpy.uint8(numpy_array_image))
old_width = float(image.size[0])
old_height = float(image.size[1])
ratio = float( new_height / old_height)
new_width = int(old_width * ratio)
image = image.resize((new_width, new_height), PIL.Image.ANTIALIAS)
# convert PIL.Image into nympy array back again
return array(image)
其他回答
我今天用的例子是:
import PIL
import numpy
from PIL import Image
def resize_image(numpy_array_image, new_height):
# convert nympy array image to PIL.Image
image = Image.fromarray(numpy.uint8(numpy_array_image))
old_width = float(image.size[0])
old_height = float(image.size[1])
ratio = float( new_height / old_height)
new_width = int(old_width * ratio)
image = image.resize((new_width, new_height), PIL.Image.ANTIALIAS)
# convert PIL.Image into nympy array back again
return array(image)
你需要将你的图像转换为numpy数组:
import numpy
import PIL
img = PIL.Image.open("foo.jpg").convert("L")
imgarr = numpy.array(img)
def imshow(img):
img = img / 2 + 0.5 # unnormalize
npimg = img.numpy()
plt.imshow(np.transpose(npimg, (1, 2, 0)))
plt.show()
您可以将图像转换为numpy 通过压缩特征后将图像解析为numpy()函数(非归一化)
将Numpy转换为PIL图像和PIL转换为Numpy
import numpy as np
from PIL import Image
def pilToNumpy(img):
return np.array(img)
def NumpyToPil(img):
return Image.fromarray(img)
将I作为数组打开:
>>> I = numpy.asarray(PIL.Image.open('test.jpg'))
对I做一些操作,然后将它转换回图像:
>>> im = PIL.Image.fromarray(numpy.uint8(I))
来源:使用FFT过滤numpy图像,Python
如果您出于某种原因想显式地执行此操作,在related .zip中的此页上有pil2array()和array2pil()函数使用getdata()。