cv2.rectangle:类型错误:由名称(“厚度”)和位置(4)给出的参数

问题描述 投票:0回答:5

我正在尝试可视化图像顶部的边界框。

我的代码:

color = (255, 255, 0)
thickness = 4
x_min, y_min, x_max, y_max = bbox
cv2.rectangle(img, (x_min, y_min), (x_max, y_max), color, thickness=thickness)

我明白了

TypeError: Argument given by name ('thickness') and position (4)
即使我按位置传递厚度,我也会得到不同的回溯:

cv2.rectangle(img, (x_min, y_min), (x_max, y_max), color, thickness)

加注

TypeError: expected a tuple.

python opencv computer-vision
5个回答
17
投票

您需要确保您的边界坐标是整数。

x_min, y_min, x_max, y_max = map(int, bbox)
cv2.rectangle(img, (x_min, y_min), (x_max, y_max), color, thickness)

调用

cv2.rectangle
都可以。


5
投票

将坐标点作为列表传递时出现此错误:

start_point = [0, 0]
end_point = [10, 10]
cv2.rectangle(image, start_point, end_point, color, thickness=1)

将它们作为元组传递解决了问题:

cv2.rectangle(image, tuple(start_point), tuple(end_point), color, thickness=1)

1
投票

有时与 OpenCV 相关的错误原因是您的图像(numpy 数组)在内存中不连续。 请重试您的图像明确连续:

img = np.ascontiguousarray(img)

当您对图像执行一些操作(例如切片、更改 RGB 顺序等)时,图像往往不连续。


0
投票

不需要声明厚度,直接给出数字即可,例如

cv2.rectangle(img, (0, 0), (250, 250), 3)

这里3代表厚度,

img
名称也不需要冒号。


0
投票

当尝试使用变量设置边界框的颜色在图像上绘制边界框时,我遇到了同样的错误,如下所示:

bbox_color = (id, id, id)
cv2.rectangle(img, (x1, y1), (x2, y2), bbox_color, thickness=1)

我认为该错误是由于颜色参数中的类型不匹配造成的。它应该是 类型,但就我而言,它是 类型。

这可以通过将每个元素转换为正确的类型来解决,如下所示:

bbox_color = (id, id, id)
bbox_color = [int(c) for c in bbox_color]
cv2.rectangle(img, (x1, y1), (x2, y2), bbox_color, thickness=1)
© www.soinside.com 2019 - 2024. All rights reserved.