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

如何解决OpenCV Python中Contours(轮廓)相关报错问题?

OpenCV轮廓处理报错解决方案

错误原因

错误出在for contour in contours:这一行。cv2.findContours在OpenCV 4.x版本中的返回值为**(contours, hierarchy)**:

  • contours是轮廓列表,每个元素是单个轮廓的坐标数组,可直接用于cv2.boundingRect等轮廓处理函数
  • hierarchy是轮廓的层级关系数据,并非轮廓坐标集合

你的代码直接遍历cv2.findContours的完整返回值(包含轮廓列表和层级数据),当循环到hierarchy时,cv2.boundingRect无法解析非轮廓格式的数据,因此触发参数错误。

修正后的代码

# 正确接收OpenCV4.x版本的findContours返回值
contours, hierarchy = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

cnts = contours
screenCnt = 0

# 遍历轮廓列表(而非完整返回值)
for contour in cnts:
    # 获取轮廓的外接矩形
    x,y,w,h = cv2.boundingRect(contour)
    # 可选:添加绘制矩形的代码
    # cv2.rectangle(img, (x,y), (x+w,y+h), (255,0,255), 2)

##### 新增代码..用于阈值处理
for c in cnts:
    # 逼近轮廓
    peri = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.02 * peri, True)

    # 若逼近后的轮廓有四个点,则认为找到目标区域
    if len(approx) == 4:
        screenCnt = approx
        break

兼容OpenCV3.x版本的补充

如果使用OpenCV 3.x,cv2.findContours返回值为**(image, contours, hierarchy)**,需修改接收代码:

_, contours, hierarchy = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:36:53