如何解决Python OpenCV findContours报错「值不足(预期3个,得到2个)」
OpenCV findContours报错解决方案
问题根源
这个报错是OpenCV大版本的接口差异导致的:教学视频使用的是OpenCV 3.x版本,你本地安装的是OpenCV 4.x版本,二者cv2.findContours的返回值数量不匹配:
- OpenCV 3.x版本返回3个值,顺序为
处理后图像、轮廓列表、层次结构,所以3个变量解包的写法_, contours,_= cv2.findContours(...)可正常运行 - OpenCV 4.x版本移除了第一个返回值,仅返回
轮廓列表、层次结构2个值,用3个变量解包就会抛出参数数量不匹配的错误
解决方案
你可以任选以下任意一种方式修改代码即可解决:
方案1:适配当前OpenCV 4.x版本
直接修改报错行的解包变量数量:
# 把原来的_, contours,_= ...改成下面的写法 contours, _ = cv2.findContours(threshold, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
方案2:兼容所有OpenCV版本
如果需要代码同时兼容3.x和4.x版本,可以直接取返回值的倒数第二个元素,固定为轮廓列表:
contours = cv2.findContours(threshold, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)[-2]
其他注意事项
你注释中写的cv2.PETER_TREE是参数拼写错误,正确的轮廓检索模式参数为cv2.RETR_TREE,修改时注意不要写错。
这个问题和opencv-contrib扩展包无关,安装contrib包无法解决该问题。
内容的提问来源于stack exchange,提问作者Mohammed Radman
相关产品推荐
相关产品推荐

