OpenCV卡尔曼滤波实现鼠标追踪时cv2.line参数类型错误问题
报错根因
- OpenCV的
cv2.line绘图函数对传入的坐标点有严格的类型要求,必须是整数类型的标量,你当前的传参不符合要求:- 代码中定义的
measurement是形状为(2,1)的np.float32类型二维数组,last_measurement[0]实际是一个长度为1的float数组,不是单个坐标数值 - OpenCV 4.x版本强化了参数类型校验,不再自动兼容float类型的坐标输入,所以直接抛出类型错误
- 代码中定义的
修复方案
只需要修改两处绘制线条的代码,在传参时把数组中的浮点值转为int类型的标量即可,属于最小改动,不会影响卡尔曼滤波的计算精度:
# 绘制实测轨迹(绿色) cv2.line(img, (int(last_measurement[0][0]), int(last_measurement[1][0])), (int(measurement[0][0]), int(measurement[1][0])), (0,255,0)) # 绘制预测轨迹(红色) cv2.line(img, (int(last_prediction[0][0]), int(last_prediction[1][0])), (int(prediction[0][0]), int(prediction[1][0])), (0,0,255))
修改后重新运行代码即可正常实现鼠标轨迹的卡尔曼追踪效果,绿色线条为鼠标实际移动轨迹,红色线条为卡尔曼滤波的预测轨迹。
内容的提问来源于stack exchange,提问作者Novruz Gurbanov
相关产品推荐
相关产品推荐

