OpenCV卡尔曼滤波器堆栈溢出
OpenCV Kalman Filter stack overflow
我正试图在OpenCV 2.2中实现一个用于3D跟踪的卡尔曼滤波器。状态变量是坐标x,y,z,然后是速度Vx,Vy和Vz,我只能测量x,y和z。
我用了一个来自O'reilly的Learning OpenCV一书中的例子开始,但当我试图将这个例子适应我的问题时,事情变得有点混乱。
这是我的实现(我试图将代码简化为相关的部分,我已经发表了很多评论,希望能简化阅读)。
CvKalman* kalman = cvCreateKalman( 6, 3, 0 );
// Setting the initial state estimates to [0,0,0,0,0,0].
CvMat* x_k = cvCreateMat( 6, 1, CV_32FC1 );
cvZero(x_k);
// Setting the a posteriori estimate to zero.
cvZero(kalman->state_post);
// Creating the process noise vector.
CvMat* w_k = cvCreateMat( 2, 1, CV_32FC1 );
// Creating the measurement vector.
CvMat* z_k = cvCreateMat( 6, 1, CV_32FC1 );
cvZero( z_k );
// Initializing the state transition matrix.
float F_kalman[] = { 1,0,0,0.05,0,0, 0,1,0,0,0.05,0, 0,0,1,0,0,0.05, 0,0,0,1,0,0, 0,0,0,0,0,1 };
memcpy( kalman->transition_matrix->data.fl, F_kalman, sizeof(F_kalman));
// Initializing the other necessary parameters for the filter.
cvSetIdentity( kalman->measurement_matrix);
cvSetIdentity( kalman->process_noise_cov, cvRealScalar(1e-2) );
cvSetIdentity( kalman->measurement_noise_cov, cvRealScalar(1e-1) );
cvSetIdentity( kalman->error_cov_post, cvRealScalar(1));
// Updates the measurement vector with my sensor values, wich were in the variable xyz (an array of CvScalar).
cvSetReal1D(z_k,0,xyz[i].val[0]);
cvSetReal1D(z_k,1,xyz[i].val[1]);
cvSetReal1D(z_k,2,xyz[i].val[2]);
cvKalmanPredict(kalman,0);
cvKalmanCorrect(kalman,z_k);
问题是,当我运行代码时,我在cvKalmanCorrect行得到一个"test.exe:0xC00000FD:Stack overflow中0x55a3e757处未处理的异常"。
也许我已经将其中一个矩阵初始化为错误的预期大小,但我真的不知道如何检查它。
有什么想法吗?
请在当前工作文件夹中使用opencv编译的pdb和dll来确定确切的问题。如果源代码在您的系统中可用,它将显示崩溃发生的位置,这将给您一些想法。
我认为误差在z_k的大小上,它应该是(3,1)而不是(6,1),因为在其中,这只是测量的3个标量,实际上是测量数组。
相关文章:
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- C++ 对象数组堆栈溢出
- 有没有一种方法可以捕获进程中的堆栈溢出?C++Linux
- 对象接收堆栈溢出异常 c++ 的排序向量
- 将公共递归转换为尾递归,因为大型输入的堆栈溢出
- C++ 中递归期间的堆栈溢出
- 启动 dll 时 C# 环境堆栈溢出
- 在C++中使用数组时如何防止堆栈溢出?
- 如何修复递归函数导致的堆栈溢出错误?C++
- 当我尝试为结构分配新指针时出现堆栈溢出错误
- 为什么析构函数无休止地调用自己(导致堆栈溢出)?
- 为什么堆栈溢出?如有建议,不胜感激
- 主函数执行时C++堆栈溢出异常
- 如何在不导致堆栈溢出的情况下计算非常大的数字和很小的 HCF.我正在使用欧几里得算法
- 我正在尝试使用回溯来解决 N queen 问题,但在编译时它会给出运行时错误(动态堆栈缓冲区溢出)
- 如何在Windows上报告堆栈缓冲区溢出
- 如何抑制来自 gcc 中地址清理器的堆栈缓冲区溢出
- 声明大数组时堆栈/堆溢出
- c++中栈溢出和分段错误的危险