You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用cv2.drawContours时box外侧方括号的作用是什么

方括号的核心作用是匹配cv2.drawContours的参数格式要求

cv2.drawContours的第二个入参要求传入轮廓集合,也就是由多个独立轮廓组成的列表/序列,每个独立轮廓是存储顶点坐标的numpy数组。

你代码中生成的box是单个轮廓:cv2.boxPoints返回旋转矩形的4个顶点坐标,转成int类型后是形状为(4, 2)的numpy数组,仅代表一个矩形轮廓。

  • 用方括号把box包裹成[box],相当于生成了一个长度为1的轮廓列表,符合第二个入参的格式要求。此时第三个入参0代表取列表中索引为0的轮廓(也就是你的矩形)进行绘制,逻辑完全正常。
  • 移除方括号直接传box时,OpenCV会把形状为(4,2)的box错误识别为「包含4个轮廓的集合」,遍历取每一行的二维坐标当成一个独立轮廓,不符合轮廓的格式要求,就会触发npoints > 0的断言报错。

补充等价写法

如果你不想加方括号,也可以选择把所有要绘制的轮廓提前整理到列表中,直接绘制所有轮廓:

# 把contourIdx设为-1代表绘制传入的轮廓集合中的所有轮廓
cv2.drawContours(image, cnts, -1, (0,255,0), 3)

这种写法就不需要循环遍历每个轮廓单独绘制,代码更简洁。

内容的提问来源于stack exchange,提问作者user9952796

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:57:03