如果我对路径进行硬编码,我可以加载图像但是当我尝试从列表中拾取字符串时,我会不断收到错误消息。不确定我做错了什么。
#for i in range(0,len(training_YFT)):
#print(training_YFT[i])
#image = Image.open("/media/rafael/Data1/train/YFT/img_00004.jpg")
image = Image.open(training_YFT[0])
#image = Image.open(training_YFT[i]).convert("L")
arr = np.asarray(image)
plt.imshow(arr, cmap='gray')
plt.pause(0.01)
plt.show()
我粘贴在我收到的错误消息下面。 Ñ
Traceback (most recent call last):
File "/home/rafael/anaconda3/lib/python3.5/site-packages/PIL/Image.py", line 2283, in open
fp.seek(0)
AttributeError: 'str' object has no attribute 'seek'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "fishy.py", line 95, in <module>
image = Image.open(training_YFT[0])
File "/home/rafael/anaconda3/lib/python3.5/site-packages/PIL/Image.py", line 2285, in open
fp = io.BytesIO(fp.read())
AttributeError: 'str' object has no attribute 'read'
答案 0 :(得分:-1)
Traceback (most recent call last):
File "/home/rafael/anaconda3/lib/python3.5/site-packages/PIL/Image.py", line 2283, in open
fp.seek(0)
AttributeError: 'str' object has no attribute 'seek'
所以第一个错误是您尝试调用的对象是file
对象,但该变量实际上是一个字符串对象。
str
对象没有名为seek
所以继续讨论列表问题。
尝试从列表中打印,确保它不是str
['path1', 'path2']
如果它确实是一个列表,它应该返回给你path1
如果它是一个字符串,它将返回p
,这不是你想要的
接下来,看起来类Image
想要一个文件对象,并且你要传递一个字符串。虽然很奇怪,你之前传递了一个字符串,它似乎有效。我的建议是尝试Image.open(open(variable))
AttributeError: 'str' object has no attribute 'read'
我从未玩过PIL包,但是,你能做的最好的事情是在函数前后打印你的变量,确保它们是你想传递的变量
print(training_YFT)
if not type(training_YFT) == list: print('training_YFT IS NOT A LIST, you\'re giving the function '+training_YET[0]+'!')
image = Image.open(training_YFT[0])
print(image)
arr = np.asarray(image)
plt.imshow(arr, cmap='gray')
plt.pause(0.01)
plt.show()
另一个建议是确保文件路径的存在。您可以通过导入os.path isfile来完成此操作。 E.g from os.path import isfile
由于没有足够的信息可以在没有所有源代码的情况下确切地确定,因此无法准确地告诉您代码的错误。但是我希望这会有所帮助,并且在事情不起作用的时候给你一些想法。