问题描述
运行以下代码时
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]))