cv2.rectangle:类型错误:按名称('thickness')和位置(4)给出参数。

13

我试图在图像上方可视化边界框。

我的代码:

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)错误。即使我按位置传递thickness参数,我也会得到不同的跟踪信息:

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

抛出 TypeError:预期元组。


你能否打印 print(type(thickness)print(thickness),这样我们就可以追踪发生了什么? - Shawn Mathew
已将它们添加为常量,但你可以看到在我的解决方案中追溯信息是非常误导人的! - Sam Shleifer
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

我在尝试使用变量设置边界框颜色来在图像上绘制边界框时,遇到了相同的错误:

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)

0

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

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

这里的3代表厚度,而且img名称不需要冒号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接