cv2.rectangle:TypeError:由名称('厚度')和位置(4)给出的参数

Posted

技术标签:

【中文标题】cv2.rectangle:TypeError:由名称(\'厚度\')和位置(4)给出的参数【英文标题】:cv2.rectangle: TypeError: Argument given by name ('thickness') and position (4)cv2.rectangle:TypeError:由名称('厚度')和位置(4)给出的参数 【发布时间】:2019-09-24 10:10:55 【问题描述】:

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

我的代码:

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.

【问题讨论】:

你能print(type(thickness)print(thickness) 以便我们追踪发生了什么吗? 将它们添加为常量,但您可以在我的解决方案中看到回溯非常具有误导性! 【参考方案1】:

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

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 的任一调用都将起作用。

【讨论】:

【参考方案2】:

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

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)

【讨论】:

【参考方案3】:

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

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

这里的 3 代表粗细,img 名称也不需要冒号。

【讨论】:

【参考方案4】:

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

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)

【讨论】:

以上是关于cv2.rectangle:TypeError:由名称('厚度')和位置(4)给出的参数的主要内容,如果未能解决你的问题,请参考以下文章

cv2.rectangle() 调用重载方法,虽然我给出了其他参数

为啥 cv2.rectangle 有时会返回 np.ndarray,而有时会返回 cv2.UMat

cv2.rectangle() 是不是有一个名为“rec”的参数?

cv2.rectangle()、cv2.putText()和cv2.imwrite()用法

OpenCV cv2.rectangle 输出二值图像

Opencv的绘图