使用OpenCV和C++的卡尔曼滤波器
Kalman Filter using OpenCV and C++
初始化:
p->kalman_filter = new cv::KalmanFilter(state_dim, measurement_dim, 0);
p->kalman_filter->transitionMatrix = *(cv::Mat_<float>(state_dim, state_dim)
<< 1,0,1,0, 0,1,0,1,
0,0,TIME_DIFFERENCE,0,
0,0,0,TIME_DIFFERENCE);
setIdentity(p->kalman_filter->measurementMatrix);
setIdentity(p->kalman_filter->processNoiseCov, cv::Scalar::all(1e-4));
setIdentity(p->kalman_filter->measurementNoiseCov, cv::Scalar::all(1e-1));
setIdentity(p->kalman_filter->errorCovPost, cv::Scalar::all(.1));
TIME_DIFFERENCE是常量。
cv::Mat new_state;
track t = p->tracks.at(track_id);
cv::transpose((cv::Mat)t.estimated_state, p->kalman_filter->statePost);
t.estimated_error_covariance.copyTo(p->kalman_filter->errorCovPost);
new_state = p->kalman_filter->predict();
代码在predict时崩溃,该错误源自predict((函数中的statePre = transitionMatrix*statePost;
。该错误是由于类型的断言失败所致。我使用transpose,因为t.estimated_state是statePost应该设置为的转置。我曾尝试使用convertTo((来更改t.estimated_state的类型。对statePost使用setTo((也不起作用。
有人能指出我哪里错了吗?
我能够解决我的问题。我应该将卡尔曼滤波器的类型设置为CV_64FC1,因为我提供的所有值都是double类型。我还将初始化transitionMatrix的Mat更改为类型double。这是我的最后一个代码
p->kalman_filter = new cv::KalmanFilter(state_dim, measurement_dim, 0, CV_64FC1);
p->kalman_filter->transitionMatrix = *(cv::Mat_<double>(state_dim, state_dim)
<< 1,0,1,0, 0,1,0,1,
0,0,TIME_DIFFERENCE,0,
0,0,0,TIME_DIFFERENCE);
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- C++ OpenCV 卡尔曼滤波器构造函数错误
- OpenCV的卡尔曼滤波器过渡矩阵如何处理时间(如t和t^2)进行运动预测?
- Opencv 平均滤波器提供的输出与 Matlab 平均滤波器不同
- 使用Kalman滤波器来filt噪声,而不会延迟OpenCV C
- Gabor滤波器C (OPENCV):错误
- 采用 Opencv c++ 的自适应中值滤波器
- OpenCV卡尔曼滤波器初始化错误
- OpenCV卡尔曼滤波器错误
- C++/OpenCV - 用于视频稳定的卡尔曼滤波器
- Sobel滤波器输出来自opencv和Matlab不同
- OpenCV卡尔曼滤波器堆栈溢出
- openCV中的卡尔曼滤波器跟踪-程序接收信号SIGSEGV
- OpenCV中的熵滤波器类似于matlab中的entropyfilter()函数
- 卡尔曼滤波器跟踪使用给定的X,Y的对象在Opencv C++
- OpenCV卡尔曼滤波器,从std::vector中删除
- 使用OpenCV和C++的卡尔曼滤波器