openCV中的卡尔曼滤波器跟踪-程序接收信号SIGSEGV

KalmanFilter Tracking in openCV - Program received signal SIGSEGV

本文关键字:程序 SIGSEGV 信号 跟踪 滤波器 openCV      更新时间:2023-10-16

我想测试KalmanFilter以进行跟踪,并找到了几个教程,它们总体上看起来非常相似(因为它主要是初始化openCV 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)