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

问题描述

我使用 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

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