zoukankan      html  css  js  c++  java
  • blobtrack中的几个问题

    1。typedef struct DefBlobTracker
    {
        CvBlob                      blob;
        CvBlobTrackPredictor*       pPredictor;
        CvBlob                      BlobPredict;
        int                         Collision;
        CvBlobSeq*                  pBlobHyp;
        float                       AverFG;
    } DefBlobTracker;

     此处是BlobTrackerCC跟踪时使用的一个结构,类CvBlobTrackerCC

    的成员变量m_BlobList(为CvBlobSeq类型)的初始化的大小为 m_BlobList(sizeof(DefBlobTracker))

    也就是 CvBlobSeq(int BlobSize = sizeof(CvBlob))     //默认大小为sizeof(CvBlob)

        {

            m_pMem = cvCreateMemStorage();

            m_pSeq = cvCreateSeq(0,sizeof(CvSeq),BlobSize,m_pMem); //创建序列的元素大小为BlobSize

            strcpy(m_pElemFormat,"ffffi");

        }

    为序列添加元素

    virtual CvBlob* AddBlob(CvBlob* pB, IplImage* /*pImg*/, IplImage* pImgFG = NULL )

        {

            assert(pImgFG); /* This tracker uses only foreground mask. */

            DefBlobTracker NewB; //后面为元素结构体内成员赋值

            NewB.blob = pB[0];

    //        CV_BLOB_ID(&NewB) = m_LastID;

            NewB.pBlobHyp = new CvBlobSeq;

            NewB.pPredictor = cvCreateModuleBlobTrackPredictKalman(); /* Module for position prediction. */

            NewB.pPredictor->Update(pB);

            NewB.pImgFG?CalcAverageMask(pB,pImgFG):0;

            m_BlobList.AddBlob((CvBlob*)&NewB); //注意元素为DefBlobTracker类型的指针

     }

    具体实现为:AddBlob(CvBlob* pB) {  cvSeqPush(m_pSeq,pB); },即:

     cvSeqPush( CvSeq *seq, const void *element )

     if( element )

            CV_MEMCPY_AUTO( ptr, element, elem_size );
        seq->first->prev->count++;
        seq->total++;
        seq->ptr = ptr + elem_size;

    2。CvBlobTracker* (*create)();

    此处create是一个函数指针,括号内*是指针标志,CvBlobTracker*是返回类型  ()内是参数列表。

    调用的时候可以是 (*create)() 或 create(),而函数指针作为类或结构体的成员时只能是后者。

    函数指针定义方式如下:

    函数类型 (*指针变量名)(形参列表);

    “函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,且*也必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。

    例如:

    int (*f)(int x);

    double (*ptr)(double x);

    在定义函数指针时请注意:
       
    函数指针和它指向的函数的参数个数和类型都应该是—致的;

    函数指针的类型和函数的返回值类型也必须是一致的。 

  • 相关阅读:
    Eclipse 远程调试
    大数据处理方法bloom filter
    sicily 1259 Sum of Consecutive Primes
    sicily 1240. Faulty Odometer
    sicily 1152 简单马周游 深度优先搜索及回溯算法
    sicily 1050 深度优先搜索解题
    sicily 1024 邻接矩阵与深度优先搜索解题
    sicily 1156 二叉树的遍历 前序遍历,递归,集合操作
    sicily 1443 队列基本操作
    sicily 1006 team rankings 枚举解题
  • 原文地址:https://www.cnblogs.com/seacode/p/1881206.html
Copyright © 2011-2022 走看看