• 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);

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

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

  • 相关阅读:
    vs整合MySQL和QT
    VS2019中QT连接及使用
    JavaScript 进阶入门
    解决MySQL workbench的resultgird不出现的问题
    JavaScript入门
    CSS学习
    Linux下如何查看tomcat是否启动、查看tomcat启动日志
    oracle常见的函数
    java.lang.ClassNotFoundException: org.springframework.web.filter.CharacterEncodingFilter
    位运算(&、|、^、~、>>、<<)
  • 原文地址:https://www.cnblogs.com/seacode/p/1881206.html
Copyright © 2020-2023  润新知