OpenCV卡尔曼滤波器初始化错误
OpenCV Kalman Filter Initialization Error
我想跟踪图像中的30个点,并希望使用OpenCV库中的卡尔曼滤波器来稳定跟踪。我以前对一个点做过这个,并成功地使用了点的位置和速度作为状态。然后,对于30个点,我决定创建30个卡尔曼滤波器,每个点一个,并将它们放入阵列中。然而,我得到了一个断言错误。
这是跟踪图像中这30个点的正确/最佳方式吗?有更好的方法吗?
我的代码在下面。问题出现在StatePre行中。
vector<KalmanFilter> ijvEdgeKF(30);
for(int i = 0; i < 30; i++){
Point temp = calcEndPoint(ijv,170,i*360/30); //Calculates initial point
ijvEdgeKF[i].statePre.at<float>(0) = temp.x; //State x
ijvEdgeKF[i].statePre.at<float>(1) = temp.y; //State y
ijvEdgeKF[i].statePre.at<float>(2) = 0; //State Vx
ijvEdgeKF[i].statePre.at<float>(3) = 0; //State Vy
ijvEdgeKF[i].transitionMatrix = *(Mat_<float>(4, 4) << 1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1);
setIdentity(ijvEdgeKF[i].measurementMatrix);
setIdentity(ijvEdgeKF[i].processNoiseCov, Scalar::all(1e-4));
setIdentity(ijvEdgeKF[i].measurementNoiseCov, Scalar::all(1e-1));
setIdentity(ijvEdgeKF[i].errorCovPost, Scalar::all(.1));
}
已解决。KalmanFilter初始化中出现问题。我没有初始化数组中的过滤器,所以这里是解决方案:
vector<KalmanFilter> ijvEdgeKF;
ijvEdgeKF.clear();
for(int i = 0; i < 30; i++){
Point temp = calcEndPoint(ijv,170,i*360/30); //Calculates initial point
KalmanFilter tempKF(4,2,0);
tempKF.statePre.at<float>(0) = temp.x; //State x
tempKF.statePre.at<float>(1) = temp.y; //State y
tempKF.statePre.at<float>(2) = 0; //State Vx
tempKF.statePre.at<float>(3) = 0; //State Vy
tempKF.transitionMatrix = *(Mat_<float>(4, 4) << 1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1);
setIdentity(tempKF.measurementMatrix);
setIdentity(tempKF.processNoiseCov, Scalar::all(1e-4));
setIdentity(tempKF.measurementNoiseCov, Scalar::all(1e-1));
setIdentity(tempKF.errorCovPost, Scalar::all(.1));
ijvEdgeKF.push_back(tempKF);
}
不过,还有一个问题,这是追踪图像中多个点的唯一方法,还是有更好的方法?
您没有正确初始化KalmanFilters,因此statePre-Mat为空。
for(int i = 0; i < 30; i++){
ijvEdgeKF[i].init(4,4); // int dynamParams, int measureParams
ijvEdgeKF[i].statePre.at<float>(0) = 3; //State x
...
相关文章:
- 使用默认构造函数引用成员变量初始化错误
- 交换机案例语句中的初始化错误
- 英特尔 MKL 稀疏 QR 求解 C++ 返回未初始化错误
- 在模板类中使用"this"会导致参数初始化错误
- 映射的映射集的映射初始化错误
- C++图形初始化错误(语法或丢失文件缺陷?
- QSQLDATABASE:SIGSEV初始化错误
- 映射的 std::for_each() 给出无效的初始化错误
- 初始化错误过多
- C++初始化错误 std::set
- 简单的类构造函数初始化错误
- 组合框初始化错误:无法读取未定义的属性'constructor'
- OpenCV卡尔曼滤波器初始化错误
- C++11动态数组部分列表初始化(错误或误解)
- C++ 静态变量在发布模式下初始化错误
- Visual Studio 2010 SP1 中的 64 位整数初始化错误
- C++libPNG-简单初始化错误
- 结构数组-初始化错误
- 初始化错误
- 我不断收到函数初始化错误.(运行时检查失败 #3)