即使提供了正确数量的参数,函数也会抛出参数错误

Function throws an argument error even though the correct number of arguments were supplied

我使用 PIL.ImageDraw.rectangle() 在图像周围绘制边界框。我提供图像的左上角、图像宽度和高度及其轮廓颜色。这些是正确的参数,但我收到此错误:

TypeError: function takes at least 3 arguments (2 given)

这是我的代码:

img_draw = ImageDraw.Draw(logo)
logo_w, logo_h = logo.size
location = (logo_position[0], logo_position[1])

img_draw.rectangle(location,
        ((logo_position[0] + logo_w),
        (logo_position[1] + logo_h)), 
        outline='Red')  # Red bounding box around each logo

我检查了很多次,这不是括号的问题。但是,我无法弄清楚这个问题。文档还确认我的代码是正确的。

您可能会说,您收到的错误消息很奇怪,而且是错误的。解析参数的方式有些怪癖,有时您会收到奇怪的错误消息。

你的错误实际上是你传递了太多参数的结果。 documentation 声明矩形的坐标应作为单个参数给出,可以是四个数字的列表,也可以是两个元组的列表。

在您的代码中,您将参数一分为二,分别提供坐标。您应该将它们分组在一个列表中,它会起作用:

img_draw.rectangle([location,
        ((logo_position[0] + logo_w),
        (logo_position[1] + logo_h))], 
        outline='Red')  # Red bounding box around each logo

请注意额外的方括号 [],用于将您的坐标组合到一个列表中。