我相信numpy.asarray是为图像创建numpy数组的推荐方法。
numpy.asarray(Image.open("cat.jpg"))
我的机器上有两个python安装。一个是本地安装在我的主目录中。以及安装在/ usr。
中的那个无论如何,本地安装不起作用。 numpy创建了一个JPEG对象的数组,不想要我需要。
array(<JpegImagePlugin.JpegImageFile image mode=RGB size=1000x781 at 0x2395878>, dtype=object)
另一个python安装输出是一个numpy数组, 是我需要的。
array([[[ 89, 125, 51],
[ 89, 125, 51],
[ 90, 126, 52],
...,
[ 53, 55, 50],
[ 53, 55, 50],
[ 53, 55, 50]],
[[ 89, 125, 51],
[ 89, 125, 51],
[ 90, 126, 52],
...,
[ 54, 56, 51],
[ 53, 55, 50],
[ 53, 55, 50]],
...,
[[132, 134, 147],
[133, 135, 148],
[133, 135, 148],
...,
[149, 165, 190],
[149, 165, 190],
[149, 165, 190]]], dtype=uint8)
任何人都知道修复?
答案 0 :(得分:2)
使用NumPy读取和写入图像时,我使用
from scipy.misc import imread, imsave
image = imread("filename.jpg")
或
from skimage.io import imread, imsave
而不是直接通过PIL / Pillow。
答案 1 :(得分:0)
我遇到了完全相同的问题:numpy.asarray
在本地计算机上无效(即生成包含单个图像对象的数组),虽然它在我的服务器上运行,但Python和PIL版本是在这两个地方都是一样的,Numpy版本在本地机器上更新(numpy.asarray
无效的那个)。
在进行一些调查之后,我终于发现这个问题是因为PIL编译时没有支持某种格式:在我的情况下,我在尝试打印IOError: Decoder 'zip' not available
字段时遇到__array_interface__
PIL在本地计算机上返回的图像对象。
要安装支持最常见图像格式的PIL,我只使用了系统存储库中的软件包,而不是使用pip安装PIL,一切正常:
sudo pip uninstall PIL
sudo apt-get install python-pil
然而,我还设法使用pip使一切正常。我做了如下(取自IOError: decoder zip not available)。
首先,我在我的系统中安装了必要的库:
sudo apt-get install libjpeg62-dev zlib1g-dev libfreetype6-dev
出于某种原因,pip没有看到这些库,它们必须在我的64位机器上链接到/usr/lib
:
sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib
sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib
sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib
由于PIL安装在那一刻仍然失败,并且有关缺少头文件的错误,我不得不创建另一个符号链接(参见Trying to install PIL "pip install PIL" and got this error.):
sudo ln -s /usr/include/freetype2 /usr/include/freetype
然后,我设法用pip重新安装PIL:
pip install -U --force-reinstall PIL
该命令的输出确认现在包括对JPEG和PNG格式的支持:
*** TKINTER support not available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
*** LITTLECMS support not available