OpenCV调用TrackerKCF_create报无属性AttributeError错误排查
问题根因
报错核心是多OpenCV包共存引发的模块加载冲突,和接口改名、版本不匹配无关:
- OpenCV 4.x版本开始,KCF、CSRT、MOSSE、GOTURN等受专利协议约束的跟踪器,全部从主仓库迁移到了
opencv_contrib扩展仓,主发行包opencv-python仅保留了无专利风险的MIL跟踪器,这也是调用TrackerMIL_create正常、其余跟踪器全部报属性不存在的直接原因。 - 环境中先后安装了
opencv-python、opencv-contrib-python、opencv-contrib-python-headless三个包,安装时会在site-packages目录下互相覆盖cv2模块的文件,Python导入cv2时会优先加载主包的核心逻辑,不会加载contrib扩展中的跟踪器实现,因此imread、imshow、resize这类主包自带的基础接口可以正常运行,仅contrib下的跟踪器接口调用失败。
修复步骤
- 第一步:彻底卸载环境中所有OpenCV相关包,重复执行卸载命令直到终端提示所有相关包均不存在,避免残留文件影响:
pip uninstall opencv-python opencv-contrib-python opencv-python-headless opencv-contrib-python-headless -y
- 第二步:根据使用场景仅安装一个OpenCV包,禁止混装任何其他opencv开头的包:
- 本地桌面环境需要使用
imshow弹出GUI窗口的场景,安装带界面的contrib版本:
pip install opencv-contrib-python==4.6.0.66- 无桌面的服务器环境、不需要GUI显示的场景,安装headless版本的contrib包:
pip install opencv-contrib-python-headless==4.6.0.66 - 本地桌面环境需要使用
注意:指定4.6.0.66是为了和当前使用的OpenCV 4.6.0内核版本完全匹配,避免版本差带来的兼容问题。
- 第三步:安装完成后可运行以下代码验证所有跟踪器接口可用性:
import cv2 tracker_creators = [ cv2.TrackerKCF_create, cv2.TrackerCSRT_create, cv2.TrackerMOSSE_create, cv2.TrackerGOTURN_create, cv2.TrackerMIL_create ] for creator in tracker_creators: t = creator() print(f"跟踪器初始化成功:{t}")
验证通过后即可正常调用所有跟踪器接口。
内容的提问来源于stack exchange,提问作者ddelarue
相关产品推荐
相关产品推荐

