好吧,我想将PIL图像对象来回转换为numpy数组,因此我可以实现比PIL PixelAccess
对象所允许的更快的逐像素转换。我想出了如何通过以下方式将像素信息放置在有用的3D numpy数组中:
pic = Image.open("foo.jpg")
pix = numpy.array(pic.getdata()).reshape(pic.size[0], pic.size[1], 3)
但是,在完成所有出色的转换之后,我似乎无法弄清楚如何将其重新加载到PIL对象中。我知道该putdata()
方法,但似乎无法使其正常工作。
你并不是在说putdata()
行为不正确。我假设你在做
>>> pic.putdata(a)
Traceback (most recent call last):
File "...blablabla.../PIL/Image.py", line 1185, in putdata
self.im.putdata(data, scale, offset)
SystemError: new style getargs format but argument is not a tuple
这是因为putdata
需要一个元组序列,并且你要给它一个numpy数组。这个
>>> data = list(tuple(pixel) for pixel in pix)
>>> pic.putdata(data)
可以工作,但是非常慢。
从PIL 1.1.6开始,在图像和numpy数组之间进行转换的“正确”方法很简单
>>> pix = numpy.array(pic)
尽管结果数组的格式与你的格式不同(在这种情况下为3维数组或行/列/ rgb)。
然后,在对阵列进行更改后,你应该可以执行任一操作pic.putdata(pix)
或使用创建新图像Image.fromarray(pix)
。
问题内容: 我有一个RGB图像。我想将其转换为numpy数组。我做了以下 它创建一个没有形状的数组。我假设它是一个iplimage对象。 问题答案: 您可以使用较新的OpenCV python接口(如果我没记错的话,自OpenCV 2.2起就可以使用)。它本机使用numpy数组: 结果:
问题内容: 我正在尝试通过和不通过将字节数组写入磁盘来验证字节数组,然后使用来打开它。我看了and方法,但是我需要图像的大小(只有将字节流转换为图像时才能得到)。 我的读取功能如下所示: 然后作为基本测试,我尝试将字节数组转换为图像: 如果有人知道我在做什么错,或者有一种更优雅的方法将这些字节转换为对我有真正帮助的图像。 PS:我以为我需要字节数组,因为我对字节进行了处理(使它们出现图像错误)。这
问题内容: 我有一个PIL图像格式的图像。我需要将其转换为字节数组。 现在我需要作为字节数组。 问题答案: 感谢大家的帮助。 终于解决了!! 这样,我不必将裁剪后的图像保存在硬盘中,并且能够从PIL裁剪后的图像中检索字节数组。
问题内容: 我因此创建了一个数组: 我要这样做的是在512x512图像的中心显示一个红点。(至少从…开始,我想我可以从那里找出其余的内容) 问题答案: 您可以使用PIL创建(并显示)图像:
问题内容: 我正在尝试将图像从转换为格式。我正在使用。这是到目前为止我一直尝试的。 但我认为图像未转换为CV格式。窗口向我显示了一个大的棕色图像。将图像从转换为格式时,我在哪里出错? 另外,为什么我需要输入访问功能? 问题答案: 用这个:
问题内容: 因此,我在程序中创建了一个函数,该函数使用户可以将自己在Turtle画布上绘制的任何内容保存为具有自己名字的Postscript文件。但是,根据Postscript文件的性质,存在一些颜色未出现在输出中的问题,并且Postscript文件仅在某些其他平台上无法打开。因此,我决定将后记文件另存为JPEG图像,因为JPEG文件应该可以在许多平台上打开,可以显示画布的所有颜色,并且分辨率应比