C++ openCV中的Kalman滤波器跟踪-程序接收信号SIGSEGV
我想测试KalmanFilter进行跟踪,并找到了几个总体上看起来非常相似的教程(因为它主要是初始化openCVs KalmanFilter和设置参数) 我追求的是这一实现: 我现在测试它有困难,因为每当我启动程序,它就会崩溃。没有生成错误,但当我开始调试时,它会显示一条短消息“程序接收信号SIGSEGV-分段错误。 调用堆栈显示第574行中的mat.hpp存在问题:C++ openCV中的Kalman滤波器跟踪-程序接收信号SIGSEGV,c++,opencv,segmentation-fault,C++,Opencv,Segmentation Fault,我想测试KalmanFilter进行跟踪,并找到了几个总体上看起来非常相似的教程(因为它主要是初始化openCVs KalmanFilter和设置参数) 我追求的是这一实现: 我现在测试它有困难,因为每当我启动程序,它就会崩溃。没有生成错误,但当我开始调试时,它会显示一条短消息“程序接收信号SIGSEGV-分段错误。 调用堆栈显示第574行中的mat.hpp存在问题: int i = i0/cols, j = i0 - i*cols; 第1043行: template<typename
int i = i0/cols, j = i0 - i*cols;
第1043行:
template<typename _Tp> inline _Tp& Mat_<_Tp>::operator ()(int i0)
{
return this->at<_Tp>(i0);
}
与
你知道是什么导致了这里的问题和/或如何解决吗?我以前试过一些方法,但到目前为止还没有找到原因。
非常感谢您的帮助。我打赌您一定想要:
Mat_<float> measurement(2, 1); // alloc 2 rows, 1 col
measurement.setTo(Scalar(0));
Mat_uuu测量(2,1);//分配2行,1列
测量。设置为(标量(0));
不是:
Mat_uu测量;//一个*空*的Mat。
度量(2,1);//在*空*垫上的访问无效(也将超出范围)
这可能是原因。我在一个单独的类中获得了它,并在头文件中创建了度量值。在这里,我无法放置Mat_uu度量值(2,1)这就是为什么我认为在初始化类的构造函数时可以创建Mat并分配行/列。在发布的示例中,他也这样做了,所以我认为这是可能的。如何在单独的类/头中做到最好?我想可以使用measurement=Mat(4,1,CV_32F)来实现然后?^^至少现在它不再崩溃了。是的,现在似乎可以工作了。谢谢你的回答,我不再考虑这个问题了。是的,我只是想说。使用构造函数。
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)