openCV中的KalmanFilter Tracking - 程序接收信号SIGSEGV

Posted

技术标签:

【中文标题】openCV中的KalmanFilter Tracking - 程序接收信号SIGSEGV【英文标题】:KalmanFilter Tracking in openCV - Program received signal SIGSEGV 【发布时间】:2014-10-13 12:41:42 【问题描述】:

我想测试 KalmanFilter 以进行跟踪,发现几个教程总体上看起来都非常相似(因为它主要是初始化 openCVs KalmanFilter 和设置参数)。

我追求这个实现:https://github.com/screename/Kalman-Filter-Tracker/blob/master/KalmanFilterTracker.ccp

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

调用堆栈显示第 574 行的 ma​​t.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));

您知道这里的问题可能是什么原因和/或如何解决吗?我之前尝试了一些东西,但到目前为止还没有找到原因。 感谢您的帮助。

【问题讨论】:

【参考方案1】:

我打赌你想要:

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)

【讨论】:

这可能是原因。我把它放在一个单独的类中,并在头文件中创建了测量值。在这里我不能放 Mat_ measure(2,1) 这就是为什么我认为在初始化我的类的构造函数时可以创建 Mat 并分配行/列。在发布的示例中,他做了同样的事情,所以我认为这是可能的。我怎样才能在单独的类/标题中做到最好? 我想可以用measurement = Mat(4,1,CV_32F) 做到这一点吗? ^^ 至少它现在不再崩溃了。是的,现在似乎可以工作了。不过谢谢你的回答,没有再考虑这个了。 是的,只是想说。使用构造函数。

以上是关于openCV中的KalmanFilter Tracking - 程序接收信号SIGSEGV的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 中卡尔曼滤波器的参数

OpenCV 的卡尔曼滤波器过渡矩阵如何处理时间(例如 t 和 t^2)进行运动预测?

Linux(Ubuntu)。 SVN + TRAC。在 TRAC 中显示 SVN 项目

C# OpenCV FAST 特征检测

我无法在 vista 上使用 VS2010 编译 opencv 示例

不会难道我还不能附上链接吗