我正在Jupyter笔记本电脑中打开一个iPhone图片。这是我的图片在硬盘上的位置:/Users/admin/work/img_2581.jpg
;这是我的Jupyter笔记本的位置:/Users/admin/work/Untitled.ipynb
。但是,我无法将图像加载到Jupyter笔记本上。
图像路径:path = '/Users/admin/work/img_2581.jpg'
笔记本位置:/Users/admin/work/Untitled.ipynb
我第一次尝试使用OpenCV打开Jupyter笔记本上的图像。
OpenCV图像读取:img = cv2.imread(path)
我试着打印图像的形状:print(img.shape)
。但是,我收到了以下错误:
AttributeError: 'NoneType' object has no attribute 'shape'
为了检查图像的路径是否正确,我使用了一个简单的Python open()
语句:
f = open("../work/img_2581.jpg", "r")
print(f)
输出:<_io.TextIOWrapper name='../work/img_2581.jpg' mode='r' encoding='UTF-8'>
看到OpenCV不工作,我尝试使用枕头:
from PIL import Image
img = Image.open(path)
当我尝试Pillow时发生以下异常:
---------------------------------------------------------------------------
UnidentifiedImageError Traceback (most recent call last)
Input In [14], in <cell line: 3>()
1 from PIL import Image
----> 3 img = Image.open(path)
File ~/opt/anaconda3/lib/python3.9/site-packages/PIL/Image.py:3283, in open(fp, mode, formats)
3281 warnings.warn(message)
3282 msg = "cannot identify image file %r" % (filename if filename else fp)
-> 3283 raise UnidentifiedImageError(msg)
UnidentifiedImageError: cannot identify image file '/Users/admin/work/img_2581.jpg'
我在这个网站上看到一个可能的问题是图像已经损坏。但是,我可以打开它没有任何问题。
我的问题如下:
(1)在OpenCV中,当我导入的图像存在时,为什么img
的值为None
?
(2)是什么原因导致枕头中出现UnidentifiedImageError
?
(3)如何解决这些问题?
1条答案
按热度按时间oalqel3c1#
似乎有两种可能性:
我将在单独的章节中介绍每种可能性。
如果OpenCV/PIL找不到您的映像...
最简单的方法是找出Jupyter笔记本运行的目录,因此用途:
然后你可以计算出你的图片的*相对路径--也就是一个不以斜杠开头的路径。
因此,如果您的笔记本电脑在
/Users/admin
中运行,则需要在打开work/img_2581.jpg
时不使用前导斜杠。如果您的笔记本电脑运行在
/Users/admin/work
中,则需要在img_2581.jpg
开头不使用斜杠。如果您的笔记本电脑运行在
/Users/admin/work/someMadDirectory
中,则需要在打开../img_2581.jpg
时不使用前导斜杠,因为..
表示 “更高一级”。如果OpenCV/PIL可以找到您的映像,但无法读取它...
有可能您的图像根本不是JPEG,或者是具有不寻常特征的JPEG(例如是12位而不是8位),或者是JPEG 2000。
在Linux/macOS上测试它是否是JPEG的最简单方法,无需安装任何特殊软件:
如果您没有
file
可用,exiftool
是检查图像的一个很好的方法,所以我建议:如果您既没有
file
也没有exiftool
,您可以将图像上传到https://hexed.it,然后复制前几行并粘贴到您的问题中,以便我们检查。