首页 > 解决方案 > 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[4],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, format, "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, format, 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, format, 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             # metadata 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

标签: pythonnumpycollectionsscikit-imageimread

解决方案


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

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

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

(注意额外的一组括号。)

更新

我们终于在 skimage 问题跟踪器上发现了这一点。修复方法是在调用时指定 tifffile 插件imread_collection

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[4],ic[3]))

推荐阅读