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”的参数?