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

 

      计算视频相邻帧的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 崩溃。


   

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值