尝试运行简单的PIL Python示例,无法将JPEG转换为浮点数

6 投票
3 回答
24964 浏览
提问于 2025-04-17 13:47

我写了一个简单的Python脚本

from PIL import Image
from pylab import *
im = array(Image.open('sample.jpg'))
imshow(im)

然后在IDLE里出现了这个错误

Traceback (most recent call last):
  File "/home/michael/Dropbox/OpenCV/greyscale.py", line 5, in <module>
    imshow(im)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 2722, in     imshow
   imlim=imlim, resample=resample, url=url, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/axes.py", line 7091, in imshow
im.set_data(X)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/image.py", line 418, in     set_data
    raise TypeError("Image data can not convert to float")
TypeError: Image data can not convert to float

大概意思是说我不能把我的图片转换成浮点数,有谁知道我缺少了什么吗?

3 个回答

0

试试这个

>>> import matplotlib.pyplot as plt
>>> plt.imshow(im.reshape(im.shape[0], im.shape[1]), cmap=plt.cm.Greys)
2

你现在的做法差不多了。根据imshow的文档,你需要传入一个图像或者一个数据数组。

这样做应该可以:

from PIL import Image
from pylab import *
im = Image.open('sample.jpg')
imshow(im)


这是imshow()所期待的内容:

"X可以是一个浮点数组、一个uint8数组或者一个PIL图像。"

这里还有一些更多的细节:
http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.imshow

17

我知道这个回答来得有点晚,但我觉得还是应该回答一下,以防其他人也遇到同样的问题。我之前也遇到过这个问题,原因是我加载的图片在项目文件夹里并不存在。所以在使用之前,你需要确认一下 sample.jpg 这个文件确实存在,并且能够正常加载。

if os.path.isfile('sample.jpg'): im = array(Image.open('sample.jpg'))
if im == None or im.size == 0: 
   print 'Image loaded is empty'
   sys.exit(1)

撰写回答