Python,使用np.dstack时出现错误,无法解决

问题描述

运行以下代码

mport matplotlib.pyplot as plt
import numpy as np
import skimage,skimage.io
from skimage.color import rgb2hsv
from skimage import io

ic = skimage.io.imread_collection('/Users/ /remoteSensing/Image/Landsat/*.tif') 
img = np.dstack((ic[5],ic[4],ic[3]))

我收到以下错误。 TypeError:意外的关键字参数:img_num

我读到一个老问题,即旧版本的NumPy和scikit-image中存在错误,但我的版本是 numpy 1.19.1
scikit-image 0.17.2
tifffile 0.15.1

希望能帮助您解决错误

这是文件夹/ Landsat的链接 https://1drv.ms/u/s!AizvpupSaqfjhzcdFz173WMZfo_J?e=N1UaeL

这是回溯:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-ee45cc9a6663> in <module>
----> 1 img = np.dstack((ic[5],ic[3]))
      2 

/Applications/anaconda3/lib/python3.7/site-packages/skimage/io/collection.py in __getitem__(self,n)
    274                         kwargs['img_num'] = img_num
    275                     try:
--> 276                         self.data[idx] = self.load_func(fname,**kwargs)
    277                     # Account for functions that do not accept an img_num kwarg
    278                     except TypeError as e:

/Applications/anaconda3/lib/python3.7/site-packages/skimage/io/_plugins/imageio_plugin.py in imread(*args,**kwargs)
      8 @wraps(imageio_imread)
      9 def imread(*args,**kwargs):
---> 10     return np.asarray(imageio_imread(*args,**kwargs))

/Applications/anaconda3/lib/python3.7/site-packages/imageio/core/functions.py in imread(uri,format,**kwargs)
    263 
    264     # Get reader and read first
--> 265     reader = read(uri,"i",**kwargs)
    266     with reader:
    267         return reader.get_data(0)

/Applications/anaconda3/lib/python3.7/site-packages/imageio/core/functions.py in get_reader(uri,mode,**kwargs)
    184 
    185     # Return its reader object
--> 186     return format.get_reader(request)
    187 
    188 

/Applications/anaconda3/lib/python3.7/site-packages/imageio/core/format.py in get_reader(self,request)
    168                 "Format %s cannot read in %s mode" % (self.name,modename)
    169             )
--> 170         return self.Reader(self,request)
    171 
    172     def get_writer(self,request):

/Applications/anaconda3/lib/python3.7/site-packages/imageio/core/format.py in __init__(self,request)
    219             self._request = request
    220             # Open the reader/writer
--> 221             self._open(**self.request.kwargs.copy())
    222 
    223         @property

/Applications/anaconda3/lib/python3.7/site-packages/imageio/plugins/tifffile.py in _open(self,**kwargs)
    224                 self._f = None
    225                 f = self.request.get_file()
--> 226             self._tf = _tifffile.TiffFile(f,**kwargs)
    227 
    228             # @R_502_5635@data is the same for all images

/Applications/anaconda3/lib/python3.7/site-packages/tifffile/tifffile.py in __init__(self,arg,name,offset,size,multifile,_useframes,_master,**kwargs)
   2461                         setattr(self,key,bool(value))
   2462                 else:
-> 2463                     raise TypeError(f'unexpected keyword argument: {key}')
   2464 
   2465         fh = FileHandle(arg,mode='rb',name=name,offset=offset,size=size)

TypeError: unexpected keyword argument: img_num

解决方法

您可以尝试更新scikit映像版本并安装tifffile吗? scikit-image 0.17更改了读取tiff文件的方式,这也许可以解决问题。

此外,正如hpaulj指出的那样,您需要将列表/元组传递给np.dstack

np.dstack((ic[5],ic[4],ic[3]))

(请注意额外的括号)。

更新

我们终于知道了on the skimage issue tracker。解决方法是在调用imread_collection时指定tifffile插件:

import matplotlib.pyplot as plt
import numpy as np
import skimage,skimage.io
from skimage.color import rgb2hsv
from skimage import io

ic = skimage.io.imread_collection(
    '/Users/ /remoteSensing/Image/Landsat/*.tif',plugin='tifffile'
) 
img = np.dstack((ic[5],ic[3]))