结构中的卡尔曼滤波器无法初始化它

时间:2016-01-27 16:50:38

标签: c++ opencv kalman-filter

我想使用卡尔曼滤波器跟踪多个对象。所以,我正在做的是,我使用结构来定义对象的属性,还使用卡尔曼滤波器来跟踪它的点。 (如下)

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)使用卡尔曼滤波器进行多个物体跟踪的方法。我哪里错了?

1 个答案:

答案 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);