我想使用卡尔曼滤波器跟踪多个对象。所以,我正在做的是,我使用结构来定义对象的属性,还使用卡尔曼滤波器来跟踪它的点。 (如下)
struct sAsparagus
{
int iId;
int iFrameId;
int iWidth;
int iHeight;
int iX;
int iY;
int iZ;
cv::KalmanFilter KF; // Here I am defining the Kalman filter and cannot initialize.
};
然后在for循环中,我试图为这些属性分配一些值。
for (CvBlobs::const_iterator it = blobs.begin(); it !=blobs.end();++it)
{
sAsparagus sAsp;
sAsp.iFrameId = iCounter;
sAsp.iWidth = (it->second->maxx - it->second->minx);
sAsp.iHeight = (it->second->maxy - it->second->miny);
sAsp.iX = it->second->centroid.x;
sAsp.iY = it->second->centroid.y;
sAsp.KF(4, 2, 0); //Here I am getting an error
vAspElements.push_back(sAsp);
}
当我跑步时,我收到如下错误。
no match for call to ‘(cv::KalmanFilter) (int, int, int)’
sAsp.KF(4, 2, 0);
如何在这里初始化我的卡尔曼滤波器?这种方法对吗?我也来看这里(OpenCV Kalman Filter Initialization Error)使用卡尔曼滤波器进行多个物体跟踪的方法。我哪里错了?
答案 0 :(得分:1)
sAsp.KF(4, 2, 0);
时, KF
无法用作默认构建的sAsparagus sAsp;
。您无法在已构造的对象上调用构造函数。您可以使用临时KF
分配给KalmanFilter
,但需要:
sAsp.KF = cv::KalmanFilter(4, 2, 0);
或者您可以使用init()
之类的
sAsp.KF.init(4, 2, 0);