我目前正在将TIFF文件转换为numpy数组。一个简单的工作代码是
from PIL import Image
photo = Image.open("filename.tif")
photo.show()
虽然我确实获得了图片输出,但是却出现了错误
TIFFSetField: tempfile.tif: Unknown pseudo-tag 65538.
而且,当我尝试
data = np.array(photo)
print(data)
我正在输出
[[[ 0 0 0 255]
[ 0 0 0 255]
[ 0 0 0 255]
...
[ 0 0 0 255]
[ 7 7 7 255]
[ 7 7 7 255]]
[[ 0 0 0 255]
[ 0 0 0 255]
[ 0 0 0 255]
...
[ 0 0 0 255]
[ 0 0 0 255]
[ 0 0 0 255]]
[[ 5 5 5 255]
[ 0 0 0 255]
[ 0 0 0 255]
...
[ 0 0 0 255]
[ 0 0 0 255]
[ 0 0 0 255]]
...
[[ 0 0 0 255]
[ 0 0 0 255]
[ 0 0 0 255]
...
[ 1 1 1 255]
[ 0 0 0 255]
[ 3 3 3 255]]
[[ 0 0 0 255]
[ 0 0 0 255]
[ 0 0 0 255]
...
[ 11 11 11 255]
[ 0 0 0 255]
[ 0 0 0 255]]]
我敢肯定它不会反映图像的信息。有什么想法可能导致此错误?如果我不必上传图像文件,我会希望。
最佳答案
您的做法对我来说似乎是正确的。下面是一个完美的示例。
In [1]: import numpy as np
In [2]: import PIL
In [3]: from PIL import Image
In [4]: img = Image.open('image.tif')
In [5]: img.show()
In [6]: img_arr = np.array(img)
# 2D array
In [7]: img_arr.shape
Out[7]: (44, 330)
In [8]: img_arr.dtype
Out[8]: dtype('uint8')
In [9]: img_arr
Out[9]:
array([[ 0, 1, 2, ..., 244, 245, 246],
[ 0, 1, 2, ..., 244, 245, 246],
[ 0, 1, 2, ..., 244, 245, 246],
...,
[ 0, 1, 2, ..., 244, 245, 246],
[ 0, 1, 2, ..., 244, 245, 246],
[ 0, 1, 2, ..., 244, 245, 246]], dtype=uint8)
另外,您也可以使用matplotlib读取图像,如下所示:
In [10]: import matplotlib.pyplot as plt
In [12]: img_ = plt.imread('image.tif')
# 3D array
In [13]: img_.shape
Out[13]: (44, 330, 4)
# PIL image read yields a 2D array instead
In [14]: img_arr.shape
Out[14]: (44, 330)
In [15]: img_.dtype
Out[15]: dtype('uint8')