0

我正在尝试将 .tiff 转换为数组,以便我可以将图像逐个像素地添加在一起,并对它们进行其他一些操作。我正在使用 numpy.fromstring() 和 im.tostring 进行转换。

def image2array(im):
  newArr = numpy.fromstring(im.tostring(),numpy.uint16)
  newArr2 = numpy.reshape(newArr,im.size)
  return newArr2

根据文档, tostring 使用标准的“原始”编码器返回一个包含像素数据的字符串。fromstring 使用标准的“原始”解码器从字符串中的像素数据创建图像内存。

该代码有效,但我不太了解原始图像编码器的工作原理。数组是否生成了字符串数据,类似于可以解码为图像的位数据?或者它是实际的像素值?我正在尝试获取实际的像素值,所以我应该使用 im.getdata() 吗?

4

2 回答 2

1

可能有一种更简单的方法可以通过 numpy.array(pilIm) 和 PIL.Image.fromarray(numpyArray) 实现您的想法: NumPy, PIL added an image

如果您也想加载压缩的 tiff 文件,请查看tifffile.py:http://code.google.com/p/pylibtiff/

编辑:numpy.array 而不是 numpy。作为数组

于 2013-01-23T15:16:29.343 回答
0

是的。你应该使用getdata(). 您可以直接使用它来创建阵列。

这篇文章给出了一个很好的例子,如何一起使用 numpy 和 PIL。

于 2013-01-22T08:11:25.507 回答