我想对KalmanFilter进行测试以进行跟踪,并找到了几本看起来总体上非常相似的教程(因为它主要是初始化openCVs KalmanFilter和设置参数)。

我执行以下实现:https://github.com/screename/Kalman-Filter-Tracker/blob/master/KalmanFilterTracker.ccp

我现在无法对其进行测试,因为每当我启动该程序时,它就会崩溃。没有构建错误,但是当我开始调试时,它显示一条简短的消息“程序收到信号SIGSEGV-分段错误。

调用堆栈显示第574行的 mat.hpp 存在问题:

int i = i0/cols, j = i0 - i*cols;

并且在第1043行:
template<typename _Tp> inline _Tp& Mat_<_Tp>::operator ()(int i0)
{
     return this->at<_Tp>(i0);
}

在KalmanFilter类中,这些行似乎很麻烦:
measurement(0) = x;
measurement(1) = y;


Mat_<float> measurement;

并用初始化
measurement(2, 1);
measurement.setTo(Scalar(0));

关于可能导致问题的原因和/或如何解决的任何想法?我之前尝试过一些方法,但到目前为止尚未找到原因。
感谢您的帮助。

最佳答案

我敢打赌你想要:

Mat_<float> measurement(2, 1);  // alloc 2 rows, 1 col
measurement.setTo(Scalar(0));

不:
Mat_<float> measurement; // an *empty* Mat.
measurement(2, 1);       // invalid access on an *empty* Mat (would be out of bounds, too)

关于c++ - openCV中的KalmanFilter跟踪-程序接收到的信号SIGSEGV,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26340271/

10-11 18:37