Python 通过skimage.io.imread读取的图像形状可疑

Python 通过skimage.io.imread读取的图像形状可疑,python,scikit-image,Python,Scikit Image,我正在尝试使用skimage.io.imread读取RGB图像。但是在阅读图像后,我发现图像的形状是错误的,print(img.shape)显示了这一点 图像形状为(2,)。显示问题的完整代码是: from skimage import io img = io.imread(path/to/the/image) print(img.shape) 我还尝试使用opencv的python包读取图像,返回的形状是正确的(高度*宽度*3) 使用的skimage版本是0.12.3,有人能解释一下我使用软

我正在尝试使用skimage.io.imread读取RGB图像。但是在阅读图像后,我发现图像的形状是错误的,
print(img.shape)
显示了这一点 图像形状为
(2,)
。显示问题的完整代码是:

from skimage import io
img = io.imread(path/to/the/image)
print(img.shape)
我还尝试使用opencv的python包读取图像,返回的形状是正确的(高度*宽度*3)

使用的skimage版本是0.12.3,有人能解释一下我使用软件包的方式有什么问题吗?或者这真的是一个bug吗

单击测试图像的链接

编辑1 上传测试图像时会对其进行更改,未更改的版本为。我还打开了skimage github repo,结果发现测试图像是 两帧图像,但第二帧为空。你可以考虑这个图像。 “损坏”的图像


为了读取正确的图像,您可以使用此解决方法,
img=io.imread(/path/to/the/image,img_num=0)
检查您上载的图像类型

如果上传彩色图像,您将获得图像的大小以及频道的数量
(1920、2560、3)

只要上传的图像是彩色图像,你就会收到3张


或者,如果图像是灰度或二进制图像,您将获得图像的大小
(1920,2560)

您可以通过强制
skimage.io.imread()
使用matplotlib来解决此问题:

In [131]: from skimage import io

In [132]: img = io.imread('156.jpg', plugin='matplotlib')

In [133]: img.shape
Out[133]: (978L, 2000L, 3L)
您的图像可能是多对象JPG。如果您尝试使用PIL(默认插件)读取它,您将得到一个由两个对象组成的NumPy数组。第一个对象是图像本身,第二个对象可能是缩略图,但PIL无法正确处理它:

In [157]: img = io.imread('156.jpg', plugin='pil')

In [158]: img.dtype
Out[158]: dtype('O')

In [159]: img.shape
Out[159]: (2L,)

In [160]: img[0].shape
Out[160]: (978L, 2000L, 3L)

In [161]: img[1]
Out[161]: array(<PIL.MpoImagePlugin.MpoImageFile image mode=RGB size=2000x978 at 0x111DBCF8>, dtype=object)
[157]中的
:img=io.imread('156.jpg',plugin='pil')
In[158]:img.dtype
Out[158]:数据类型('O')
In[159]:img.shape
Out[159]:(2L,)
In[160]:img[0]。形状
Out[160]:(978L、2000L、3L)
In[161]:img[1]
Out[161]:数组(,dtype=object)

查看以了解有关此问题的更多信息。

无法重现此问题。我已经下载了图像,然后运行您的代码(使用相同版本的skimage)并获得:
(978L,2000L,3L)
@Tonechas,测试图像在上载时会被更改。我已经更新了测试图像的链接。正确的md5sum为6bc94ff2d3a2ea82b514051ec182ee97。这张图片应该会重现这个问题。我在尝试将图片上传到云端时遇到了浏览问题,可能是因为压缩和解压缩。使用,img_num=0,问题得到解决。原始上传的图像在上传过程中被更改。我已经更新了测试图像的链接。它应该重现问题。是的,该图像可以被视为“损坏”,因为它有两层。但我认为明确告诉imread使用哪个插件很麻烦,因为大多数图像都是“好”的。这个问题还没有解决。