枕头Image.convert TypeError:参数1必须是str,而不是int

时间:2019-08-21 20:01:18

标签: python image python-imaging-library

我正在尝试从此repo运行模型。并收到以下错误:

Traceback (most recent call last):
  File "denet_glaucoma_screen/Demo_DENet_GlaucomaScreen.py", line 72, in <module>
    org_img = np.array(Image.fromarray(org_img).resize((2048, int(org_img.shape[1] * img_scale))).convert(3))
  File "/usr/local/lib/python3.6/dist-packages/PIL/Image.py", line 975, in convert
    im = self.im.convert(mode, dither)
TypeError: argument 1 must be str, not int

我相信导致错误的部分是这样的:

    for lineIdx, file_test in enumerate(file_test_list):
        temp_txt = [elt.strip() for elt in file_test.split(',')]
        org_img = np.asarray(image.load_img(os.path.join(data_img_path, 
    temp_txt[0])))

    img_scale = 2048.0 / org_img.shape[0]
    org_img = np.array(Image.fromarray(org_img).resize((2048, int(org_img.shape[1] * img_scale))).convert(3))

看着Image.convert,我不知道为什么在那边会有3

我尝试将3更改为"3""RGB",甚至取消了整个convert的位置,但是遇到了类似unable to process that type of data或类似的东西。

  • 更新1:

我尝试更改行: org_img = np.array(Image.fromarray(org_img).resize((2048, int(org_img.shape[1] * img_scale))).convert(3))

org_img = np.array(Image.fromarray(org_img).resize((2048, int(org_img.shape[1] *img_scale), 3)))
但是我遇到了以下错误:

   File "denet_glaucoma_screen/Demo_DENet_GlaucomaScreen.py", line 74, in <module>
    img_scale), 3)))
  File "/usr/local/lib/python3.6/dist-packages/PIL/Image.py", line 1745, in resize
    return self._new(self.im.resize(size, resample, box))
TypeError: argument 1 must be sequence of length 2, not 3
  • 更新2: 尝试将以上内容更改为: org_img = np.array(Image.fromarray(org_img).resize((2048, int(org_img.shape[1] * img_scale), 3)), mode='RGB')
    但是我遇到了以下错误:
  File "denet_glaucoma_screen/Demo_DENet_GlaucomaScreen.py", line 74, in <module>
    img_scale), 3)), mode='RGB')
  File "/usr/local/lib/python3.6/dist-packages/PIL/Image.py", line 1745, in resize
    return self._new(self.im.resize(size, resample, box))
TypeError: argument 1 must be sequence of length 2, not 3
  • 更新3: 尝试运行:
org_img = np.array(Image.fromarray(org_img, mode='RGB').resize((2048, int(org_img.shape[1]*img_scale), 3)))

但是我遇到了以下错误:

  File "denet_glaucoma_screen/Demo_DENet_GlaucomaScreen.py", line 73, in <module>
    org_img = np.array(Image.fromarray(org_img, mode='RGB').resize((2048, int(org_img.shape[1]*img_scale), 3)))
  File "/usr/local/lib/python3.6/dist-packages/PIL/Image.py", line 1745, in resize
    return self._new(self.im.resize(size, resample, box))
TypeError: argument 1 must be sequence of length 2, not 3

1 个答案:

答案 0 :(得分:1)

您从原始存储库错误地更改了代码。这就是他们为org_img所拥有的:

org_img = scipy.misc.imresize(org_img, (2048, int(org_img.shape[1]*img_scale), 3))

imresize中的scipy已贬值。如果查看旧的scipy函数的代码和文档,您会发现它们正在为数组传递org_img和为大小传递(2048, int(org_img.shape[1]*img_scale), 3),即3是数组的一部分。指定调整大小的元组-他们没有像尝试在代码中那样将其用作mode进行转换。

由于这是3D模式,因此根据调整大小的3个维度,scipy文档说:

  

对于3-D和4-D阵列,模式将分别设置为'RGB'和'RGBA'。

所以你想要

numpy.array(Image.fromarray(org_img, mode='RGB').resize((2048, int(org_img.shape[1]*img_scale))))