CLM研究

CLM

FACETRACKER::Tracker model(ftFile);
int Tracker::Track(cv::Mat im,vector<int> &wSize, const int  fpd,
           const int  nIter, const double clamp,const double fTol,
           const bool fcheck)
{ 
  assert(im.type() == CV_8U);
  //转换成灰度图
  if(im.channels() == 1)
      gray_ = im;
  else
  {
    if((gray_.rows != im.rows) || (gray_.cols != im.cols))
      gray_.create(im.rows,im.cols,CV_8U);
    cv::cvtColor(im,gray_,CV_BGR2GRAY);
  }

  //检测人脸,返回人脸矩阵
  bool gen,rsize=true; 
  cv::Rect R;
  if((_frame < 0) || (fpd >= 0 && fpd < _frame))
  {
    _frame = 0; 
    R = _fdet.Detect(gray_);                
    gen = true;
  }
  else
  {
      R = this->ReDetect(gray_); 
      gen = false;
  }
  if((R.width == 0) || (R.height == 0))
  {
      _frame = -1; 
      return -1;
  }
  _frame++;

  if(gen)
  {
    this->InitShape(R,_shape);//通过rect赋值人脸形状
    _clm._pdm.CalcParams(_shape,_clm._plocal,_clm._pglobl);
  }
  else
  {
    double tx = R.x - _rect.x,ty = R.y - _rect.y;
    _clm._pglobl.db(4,0) += tx;    
    _clm._pglobl.db(5,0) += ty; 
    rsize = false;
  }
  _clm.Fit(gray_,wSize,nIter,clamp,fTol);
  _clm._pdm.CalcShape2D(_shape,_clm._plocal,_clm._pglobl);

  for(int ss=0;ss<66;ss++)
  {
      cv::circle(gray_,cv::Point(_shape.at<double>(ss,0),_shape.at<double>(ss+66,0)),1,CV_RGB(255,255,255),2);
  }
  imshow("Face Tracker",gray_); 
  cvWaitKey(1);

  if(fcheck)
  {
      if(!_fcheck.Check(_clm.GetViewIdx(),gray_,_shape))
          return -1;
  }
  _rect = this->UpdateTemplate(gray_,_shape,rsize); 
  if((_rect.width == 0) || (_rect.height == 0))
      return -1;
  else
      return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值