使用OpenCV 4.10.0的TrackerDaSiamRPN调用init时抛出未知C++异常
解决OpenCV TrackerDaSiamRPN初始化异常问题
问题原因分析
- 图像格式不兼容:DaSiamRPN跟踪器要求输入为3通道彩色BGR图像,但代码中将帧转换为了单通道灰度图,导致初始化失败。
- 预训练模型缺失:OpenCV的DaSiamRPN依赖官方预训练权重文件,若未正确加载会触发底层C++异常。
具体修复步骤
1. 恢复彩色图像输入
移除灰度转换代码,直接使用原始BGR格式的帧:
import cv2 video_path = '.../v1.mp4' video = cv2.VideoCapture(video_path) tracker = cv2.TrackerDaSiamRPN() if not video.isOpened(): print("Could not open video") exit() # 增加退出逻辑避免后续无意义执行 # 读取第一帧 ok, frame = video.read() if not ok: print('Cannot read video file') exit() # 移除灰度转换语句:frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) roi = cv2.selectROI(frame, True) tracker.init(frame, roi)
2. 配置预训练模型路径
DaSiamRPN需要加载官方提供的两个模型文件:dasiamrpn_model.onnx 和 dasiamrpn_kernel_r1.onnx,需在初始化时指定路径:
# 替换为你本地的模型文件路径 model_path = "/your/path/dasiamrpn_model.onnx" kernel_path = "/your/path/dasiamrpn_kernel_r1.onnx" # 带参数初始化跟踪器 tracker = cv2.TrackerDaSiamRPN_create(model_path, kernel_path)
注意:无参构造
cv2.TrackerDaSiamRPN()会尝试从OpenCV默认路径加载模型,若路径下无模型文件则会抛出异常。
3. 额外验证项
- 检查OpenCV完整性:运行
print(cv2.getBuildInformation()),确认输出中包含opencv_contrib模块(DaSiamRPN属于contrib组件)。 - 确认视频路径有效性:优先使用绝对路径,避免相对路径导致的文件查找失败。
内容的提问来源于stack exchange,提问作者Babak.Abad
相关产品推荐
相关产品推荐

