OpenCV学习笔记一(CvSeq的使用)

来源:互联网 发布:淘宝头条一篇多少钱 编辑:程序博客网 时间:2024/06/07 05:48

 

      计算视频相邻帧的PCC值,将小于阈值T的PCC值与其对应的帧号保存在GrayPCC中,并从小到大排序。     

    CvMemStorage *stor=cvCreateMemStorage(0);    CvSeq *GrayPCC = cvCreateSeq(CV_32FC2,sizeof(CvSeq),sizeof(Point_<float>),stor);    calPCC(filename,GrayPCC);

      调用calPCC函数计算,PCC值保存在framePCC数组中。    


    

    float threshold = 0.7f;    Point_<float> index_PCC;    for(int i = 1; i < frameToStop - frameToStart; i++)if(framePCC[i]< threshold){  index_PCC.x = (float)i;  index_PCC.y = framePCC[i];  cvSeqPush(PCCSeq,&index_PCC);}

    

     注意保持Point_<float>类型一致。    

   

  cvSeqSort( PCCSeq, (CvCmpFunc)cmp_func, 0 /* userdata is not used here */ );  //对seq排序   Point_<float>* SeqPointer;  //将排序结果逐一输出   for(int i = 0; i<PCCSeq->total ;i++)  {    SeqPointer = (Point_<float>*)cvGetSeqElem(PCCSeq, i);    cout<<"!!"<<CV_GET_SEQ_ELEM( Point_<float>, PCCSeq, i )->x<<","<<CV_GET_SEQ_ELEM( Point_<float>, PCCSeq, i )->y<<endl;  }

 static int cmp_func( const void* _a, const void* _b, void* userdata ){    Point_<float>* a = (Point_<float>*)_a;    Point_<float>* b = (Point_<float>*)_b;   if (a->y<=b->y)return -1;      else        return 1;}


  cvSeqSort 的使用参考  http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=5721


  刚开始排序结果没有顺序,检查了半天发现写成了 static float cmp_func 崩溃。