运行OpenCV摄像头动检代码遇cv2.findContours解包ValueError求助
问题原因
这个报错是OpenCV版本迭代导致的cv2.findContours接口返回值变更引发的:
- OpenCV 3.x 版本中,
cv2.findContours返回3个值,顺序为处理后的图像, 轮廓列表, 层级信息,你原来的(_,cnts,_)写法是适配这个版本的 - OpenCV 4.x 及以上版本中,接口取消了第一个返回值,仅返回
轮廓列表, 层级信息两个值,所以你用3个变量接收就会触发「值不够解包」的错误
修复方案
- 把报错的那一行代码替换为如下内容即可:
cnts, _ = cv2.findContours(thresh_frame.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
- 额外补充一个代码疏漏:你代码末尾的
cv2.destroyAllWindows漏了调用括号,改成cv2.destroyAllWindows()才能正常销毁所有预览窗口。
修改完成后运行即可正常弹出四个预览窗口,实现动态检测功能。
内容的提问来源于stack exchange,提问作者EpicNinja
相关产品推荐
相关产品推荐

