如何修复AttributeError: module 'cv2' has no attribute 'legacy'错误
解决
AttributeError: module 'cv2' has no attribute 'legacy'问题 问题根源
你本地安装的opencv-python(4.7.0.72)和opencv-contrib-python(4.5.5.62)版本不匹配,且低版本的contrib扩展包中,MultiTracker并未被归类到legacy模块下,这和Colab中适配TensorFlow 2.12的高版本OpenCV模块结构不一致,导致调用失败。
解决方法
1. 统一OpenCV主包与contrib包版本
版本不匹配是最常见的模块缺失原因,将两个包升级到同一版本即可解决:
- 先卸载现有版本:
pip uninstall opencv-python opencv-contrib-python -y - 重新安装同版本的两个包(推荐和你主包一致的4.7.0.72):
pip install opencv-python==4.7.0.72 opencv-contrib-python==4.7.0.72
2. 适配低版本OpenCV的代码修改(若不想升级)
如果因其他依赖限制无法升级contrib包,可修改代码中MultiTracker的调用方式——在OpenCV 4.5.x版本中,MultiTracker_create()直接属于cv2模块:
# 替换原代码中的 cv2.legacy.MultiTracker_create() tracker = cv2.MultiTracker_create() # 部分4.5.x版本也支持这种写法 tracker = cv2.MultiTracker()
3. 验证修复结果
安装/修改完成后,在Python交互环境中验证:
import cv2 print(cv2.__version__) print(hasattr(cv2, 'legacy')) # 若legacy存在,测试实例化 if hasattr(cv2, 'legacy'): tracker = cv2.legacy.MultiTracker_create() print("MultiTracker实例化成功")
额外说明
TensorFlow 2.10与OpenCV 4.7.x版本完全兼容,不会因OpenCV版本调整引发新的环境冲突。
内容的提问来源于stack exchange,提问作者zvith
相关产品推荐
相关产品推荐

