安装imutils后skimage.io.imsave报参数过多TypeError求助
问题:安装imutils后skimage.io.imsave保存图像报错
原本可正常使用skimage.io.imsave保存图像,执行conda install -c conda-forge imutils安装imutils包(同步更新了部分依赖)后,出现如下报错:
File "C:\Users\user\.conda\envs\py38\lib\site-packages\spyder_kernels\py3compat.py", line 356, in compat_exec exec(code, globals, locals) File "\\company.com\data\p\user\python codes\met_codes\met_script.py", line 427, in <module> io.imsave(path, img) File "C:\Users\user\.conda\envs\py38\lib\site-packages\skimage\io\_io.py", line 143, in imsave return call_plugin('imsave', fname, arr, plugin=plugin, **plugin_args) File "C:\Users\user\.conda\envs\py38\lib\site-packages\skimage\io\manage_plugins.py", line 207, in call_plugin return func(*args, **kwargs) File "C:\Users\user\.conda\envs\py38\lib\site-packages\imageio\v2.py", line 239, in imwrite return file.write(im, **kwargs) File "C:\Users\user\.conda\envs\py38\lib\site-packages\imageio\core\legacy_plugin_wrapper.py", line 229, in write writer.append_data(image) File "C:\Users\user\.conda\envs\py38\lib\site-packages\imageio\core\format.py", line 589, in append_data return self._append_data(im, total_meta) File "C:\Users\user\.conda\envs\py38\lib\site-packages\imageio\plugins\pillow_legacy.py", line 540, in _append_data PillowFormat.Writer._append_data(self, im, meta) File "C:\Users\user\.conda\envs\py38\lib\site-packages\imageio\plugins\pillow_legacy.py", line 382, in _append_data img.save(self._fp, format=self.format.plugin_id, **self._meta) File "C:\Users\user\.conda\envs\py38\lib\site-packages\PIL\Image.py", line 2320, in save -rotn_center[0] - post_trans[0], -rotn_center[1] - post_trans[1], matrix File "C:\Users\user\.conda\envs\py38\lib\site-packages\PIL\JpegImagePlugin.py", line 806, in _save ImageFile._save(im, fp, [("jpeg", (0, 0) + im.size, 0, rawmode)], bufsize) File "C:\Users\user\.conda\envs\py38\lib\site-packages\PIL\ImageFile.py", line 520, in _save _encode_tile(im, fp, tile, bufsize, fh) File "C:\Users\user\.conda\envs\py38\lib\site-packages\PIL\ImageFile.py", line 531, in _encode_tile encoder = Image._getencoder(im.mode, e, a, im.encoderconfig) File "C:\Users\user\.conda\envs\py38\lib\site-packages\PIL\Image.py", line 426, in _getencoder encoder = ENCODERS[encoder_name] TypeError: function takes at most 13 arguments (14 given)
当前调用代码:
path = "img_out.jpg" io.imsave(path, img, check_contrast=False,quality=100)
解决方案
回退Pillow版本:报错根源是安装imutils时更新的Pillow版本与现有scikit-image、imageio依赖不兼容。回退到之前能正常工作的版本即可,例如:
conda install pillow==8.4.0或用pip:
pip install pillow==8.4.0可根据自己之前的环境版本调整具体版本号。
指定imsave使用特定插件:在调用
io.imsave时显式指定插件,绕开imageio的legacy插件问题,无需修改核心逻辑:io.imsave(path, img, check_contrast=False, quality=100, plugin='pil')也可尝试
plugin='matplotlib',根据实际环境选择可用插件。锁定依赖版本:后续创建conda环境时,在环境配置文件(如
environment.yml)中明确指定scikit-image、imageio、pillow的具体版本,避免依赖更新引发冲突。
内容的提问来源于stack exchange,提问作者lou_a
相关产品推荐
相关产品推荐

