Image.open() 无法识别图像文件-Python?
- 2025-03-20 08:47:00
- admin 原创
- 47
问题描述:
我在 Visual Studio 2013 中运行 Python 2.7。代码以前在 Spyder 中运行正常,但是当我运行时:
import numpy as np
import scipy as sp
import math as mt
import matplotlib.pyplot as plt
import Image
import random
# (0, 1) is N
SCALE = 2.2666 # the scale is chosen to be 1 m = 2.266666666 pixels
MIN_LENGTH = 150 # pixels
PROJECT_PATH = 'C:\\cimtrack_v1'
im = Image.open(PROJECT_PATH + '\\ST.jpg')
我最终遇到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:cimtrack_v1PythonApplication1dr rajgen.py", line 19, in <module>
im = Image.open(PROJECT_PATH + '\\ST.jpg')
File "C:Python27libsite-packagesPILImage.py", line 2020, in open
raise IOError("cannot identify image file")
IOError: cannot identify image file
为什么会这样?我该如何解决?
根据建议,我已将 Pillow 安装程序用于 Python 2.7。但奇怪的是,我最终得到了这个:
>>> from PIL import Image
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named PIL
>>> from pil import Image
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named pil
>>> import PIL.Image
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named PIL.Image
>>> import PIL
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named PIL
全部失败!
解决方案 1:
我遇到了同样的问题。
from PIL import Image
而不是
import Image
解决了这个问题
解决方案 2:
就我而言,我的代码中已经有“从 PIL 导入图像”了。
出现此错误是因为图像文件仍在使用中(被我代码中的上一个操作锁定)。我不得不添加一个小延迟或尝试在循环中以追加模式打开文件,直到成功为止。一旦成功,就意味着文件不再使用,我可以继续并让 PIL 打开文件。以下是我用来检查文件是否正在使用并等待其可用的函数。
def is_locked(filepath):
locked = None
file_object = None
if os.path.exists(filepath):
try:
buffer_size = 8
# Opening file in append mode and read the first 8 characters.
file_object = open(filepath, 'a', buffer_size)
if file_object:
locked = False
except IOError as message:
locked = True
finally:
if file_object:
file_object.close()
return locked
def wait_for_file(filepath):
wait_time = 1
while is_locked(filepath):
time.sleep(wait_time)
解决方案 3:
因此,在解决这个问题很长一段时间之后,以下方法可以帮到你:
from PIL import Image
而不是
import Image
此外,如果您的图像文件未加载并且您收到错误“没有文件或目录”,那么您应该执行以下操作:
path=r'C:ABCUsersPicturesimage.jpg'
然后打开文件
image=Image.open(path)
解决方案 4:
首先,检查你的枕头版本
python -c 'import PIL; print PIL.PILLOW_VERSION'
我使用pip install --upgrade pillow
从 2.7 升级到 2.9(或 3.0)解决了这个问题。
解决方案 5:
就我而言,图像在下载过程中被损坏(使用 wget 和 github url)。
尝试来自不同来源的多幅图像。
from PIL import Image
Image.open()
解决方案 6:
通常是因为图像文件未被上一个程序关闭。
最好使用
with Image.open(file_path) as img:
#do something
解决方案 7:
就我而言,这是因为我使用的图像存储在 Mac 上,这会生成许多隐藏文件,如 .image_file.png,因此它们甚至不是我真正需要的图像,我可以放心地忽略警告或删除隐藏文件。这只是我的疏忽。
解决方案 8:
这只是给遇到和我一样问题的人的提示。我一直在使用 OpenCV/cv2 将 numpy 数组导出到 Tiff,但使用 PIL Open Image 打开这些 Tiff 时遇到了问题,并且出现了与标题中相同的错误。问题原来是 PIL Open Image 无法打开通过导出 numpy float64 数组创建的 Tiff。当我将其更改为 float32 时,PIL 可以再次打开 Tiff。
解决方案 9:
我遇到了同样的问题。就我而言,图像文件大小为 0(零)。打开图像之前请检查文件大小。
fsize = os.path.getsize(fname_image)
if fsize > 0 :
img = Image.open(fname_image)
#do something
解决方案 10:
如果您在 Windows 上使用 Anaconda,那么您可以打开Anaconda Navigator应用程序并转到环境部分并在已安装的库中搜索枕头,然后通过右键单击复选框将其标记为升级到最新版本。
截图供参考:
这修复了以下错误:
PermissionError: [WinError 5] Access is denied: 'e:\\work\\anaconda\\lib\\site-packages\\pil\\_imaging.cp36-win_amd64.pyd'
解决方案 11:
似乎是权限问题。我遇到了同样的错误。但是当我从 root 帐户运行它时,它成功了。因此,要么使用 chmod(在 Linux 中)授予文件读取权限,要么以 root 用户身份登录后运行脚本。
解决方案 12:
在我的例子中,文件夹中有一张空图片。删除空的 .jpg 后,它就可以正常工作了。
解决方案 13:
尝试使用 PIL 打开多波段图像时也会出现此错误。它似乎可以很好地处理 4 个波段(可能是因为它假设了一个 alpha 通道),但如果超过这个值,就会出现此错误。就我而言,我改用 tifffile.imread 来修复它。
解决方案 14:
我在 Google colab 工作,遇到了同样的问题。
UnidentifiedImageError:无法识别图像文件'/content/drive/MyDrive/Python/test.jpg'
问题是 colab 中 PIL 的默认版本(截至今天的 2022 年 11 月 24 日)是 9.3.0;但是当您执行更新时,!pip install pillow
更新的版本是 7.1.2。
因此,我所做的是打开一个新的 colab 笔记本,而不是 pip 枕头。它成功了。
解决方案 15:
就我而言,发生错误是因为我尝试打开包含未知字体的 .eps 文件。
解决方案 16:
就我而言,图像文件刚刚被写入,需要在打开之前刷新,如下所示:
img_file.flush()
img = Image.open(img_file.name))
解决方案 17:
对于任何进行更大规模操作的人,你可能还会检查你有多少个文件描述符。如果你在不合适的时机用完了,它会抛出这个错误。
解决方案 18:
对于那些遇到 Google Colab 错误colab PIL UnidentifiedImageError: cannot identify image file
并遇到了新 PIL 版本的人来说,之前的解决方案都不起作用:
只需重新启动环境,您安装的 PIL 版本可能已过时。
解决方案 19:
对于我来说,通过再次下载我正在使用的图像数据集(实际上,我使用 vs-code 的 SFTP 转发了本地的副本)可以解决这个问题。这是我使用的 jupyter 笔记本(在 vscode 中)及其输出:
from pathlib import Path
import PIL
import PIL.Image as PILI
#from PIL import Image
print(PIL.__version__)
img_path = Path('PATH_UR_DATASET/miniImagenet/train/n03998194/n0399819400000585.jpg')
print(img_path.exists())
img = PILI.open(img_path).convert('RGB')
print(img)
输出:
7.0.0
True
<PIL.Image.Image image mode=RGB size=158x160 at 0x7F4AD0A1E050>
请注意,open
始终以模式打开r
,并且如果该模式发生变化,甚至会检查是否引发错误。
解决方案 20:
就我而言,该错误是由 TIFF 文件中的 alpha 通道引起的。
解决方案 21:
我将添加我的具体案例。
我正在处理通过multipart/form-data
使用上传的图像AWS API Gateway
。当我上传图像时,本地没有出现此错误,我观察到UnidentifiedImageError
PIL 在加载上传的图像时抛出了异常。为了修复此错误,我必须multipart/form-data
在服务设置中添加。
解决方案 22:
确保格式正确...如果文件损坏,它将无法工作..
我从网上下载了一个图像,它看起来像“abcd.avif”,然后我将其重命名为“abcd.jpg”。然后尝试处理“abcd.jpg”,得到了同样的错误。
上传 JPG 格式/非损坏的不同文件后,它起作用了
扫码咨询,免费领取项目管理大礼包!