You need to enable JavaScript to run this app. 调用cv2.findContours绘制图像轮廓时出现too many values to unpack (expected 2)报错
优惠活动
大模型
产品
解决方案
定价
更多

调用cv2.findContours绘制图像轮廓时出现too many values to unpack (expected 2)报错

报错触发原因

该问题是OpenCV 版本差异导致的函数返回值结构不匹配:

  • OpenCV 3.x及更早版本中,cv2.findContours 共返回3个值:被函数原生修改的二值图、轮廓列表、轮廓层级关系
  • OpenCV 4.0及以上版本中,cv2.findContours 移除了返回二值图的逻辑,仅返回2个值:轮廓列表、轮廓层级关系
    当前运行代码的环境搭载的是3.x及更早版本的OpenCV,但代码按照4.x版本的规则编写了2个值的解包逻辑,因此触发解包数量不匹配的报错。
解决方案

任选一种方式修复即可:

  • 适配当前本地环境的老版本OpenCV:修改函数调用行的解包逻辑,用下划线占位忽略不需要的首个返回值,修改后的代码行:
    _, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
    
  • 升级本地OpenCV到4.0及以上版本,升级后原本编写的两值解包代码可以正常运行,无需额外修改。
附带提示

代码中有一处和当前报错无关的小问题:在单通道的灰度图imgray上使用三通道格式的绿色(0, 255, 0)绘制轮廓时,OpenCV仅会取该颜色的第一个分量作为单通道图的绘制值,最终画出的轮廓是黑色而非预期的绿色。如果需要在灰度图上显示高对比度的轮廓,可以将该位置的绘制颜色改为单通道灰度值,比如255(纯白色)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.14 03:06:02