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

调用cv2.findContours报ValueError解包值不足(期望3得2)是什么原因?

问题排查:ValueError: not enough values to unpack (expected 3, got 2)

该报错由OpenCV版本迭代导致的cv2.findContours返回值数量变化引发:

  • OpenCV 3.x 版本中,cv2.findContours返回3个参数,顺序为「处理后的图像、轮廓列表、轮廓层级信息」,你当前使用的_, contours, _ =写法是适配3.x版本的语法。
  • OpenCV 4.x 及以上版本中,官方移除了第一个返回的图像参数,该函数仅返回2个参数:「轮廓列表、轮廓层级信息」,用3个变量接收就会触发解包数量不匹配的错误。

解决方法

方法1:适配高版本OpenCV(4.x及以上)

直接修改解包代码,用2个变量接收返回值即可:

import cv2
import numpy as np

contours, _ = cv2.findContours(Nucleus_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
pad_del = np.zeros_like(Nucleus_img)

方法2:兼容多版本OpenCV

如果需要代码同时适配3.x和4.x版本的OpenCV,可以用索引取固定位置的返回值,不受返回数量影响:

import cv2
import numpy as np

contour_res = cv2.findContours(Nucleus_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 无论返回2个还是3个值,轮廓列表都在倒数第二位
contours = contour_res[-2]
pad_del = np.zeros_like(Nucleus_img)

内容的提问来源于stack exchange,提问作者Jacqueline Rose Alipo-on

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:18:05