提问者:小点点

Python TypeError:需要整数参数,得到浮点


您好,我正在尝试运行涉及绘制框的代码,但不断返回错误

TypeError: integer argument expected, got float

代码中出现的第一个问题是

def draw_box(Image, x, y, w, h):
    cv2.line(Image, (x, y), (x + (w/5) ,y), WHITE, 2)
    cv2.line(Image, (x+((w/5)*4), y), (x+w, y), WHITE, 2)
    cv2.line(Image, (x, y), (x, y+(h/5)), WHITE, 2)
    cv2.line(Image, (x+w, y), (x+w, y+(h/5)), WHITE, 2)
    cv2.line(Image, (x, (y+(h/5*4))), (x, y+h), WHITE, 2)
    cv2.line(Image, (x, (y+h)), (x + (w/5) ,y+h), WHITE, 2)
    cv2.line(Image, (x+((w/5)*4), y+h), (x + w, y + h), WHITE, 2)
    cv2.line(Image, (x+w, (y+(h/5*4))), (x+w, y+h), WHITE, 2)

我用python floor division替换了除法符号,修复了这个问题,不过接下来的方框图区域返回了相同的类型错误

cv2.rectangle(Image, (Name_X_pos-10, Name_y_pos-25), (Name_X_pos +10 + (len(NAME) * 7), Name_y_pos-1), (0,0,0), -2)

我试过放cv2。矩形(int)(图像,(名称)仅接收回

TypeError: int() takes at most 2 arguments (5 given)

有没有办法解决这个问题?


共1个答案

匿名用户

与最初的错误一样,在您的矩形()调用中的问题是指定像素坐标的参数不是整数。即使没有除法,也不清楚你的一些原始变量是浮点数,还是乘法只是将其中一些转换为浮点数而不是整数...不管怎样,如果你只是将每个坐标转换为整数,你应该可以走了。例如:

cv2.rectangle(Image,
              (int(Name_X_pos-10), int(Name_y_pos-25)),
              (int(Name_X_pos +10 + (len(NAME) * 7)), int(Name_y_pos-1)),
              (0,0,0), -2)