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 行的 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));
您知道这里的问题可能是什么原因和/或如何解决吗?我之前尝试了一些东西,但到目前为止还没有找到原因。 感谢您的帮助。
【问题讨论】:
【参考方案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_以上是关于openCV中的KalmanFilter Tracking - 程序接收信号SIGSEGV的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV 的卡尔曼滤波器过渡矩阵如何处理时间(例如 t 和 t^2)进行运动预测?
Linux(Ubuntu)。 SVN + TRAC。在 TRAC 中显示 SVN 项目