2012-02-27 91 views
2

`void calc_distance(vector finger tip,CvPoint palmCenter,IplImage * source) { double distance = 0;矢量迭代器不能解碼....?

vector<CvPoint>::iterator p; 

if (fingerTips.size() != NULL && fingerTips.size() <= 5 && fingerTips.size() >= 1) 
{ 

    if ((fingerTips.size() > 1) || (fingerTips.size() <= 5)) 
     { 

     distance = 0; 

     p = fingerTips.begin(); 

     CvPoint forefinger = *p; 

     CvPoint secondfinger; 

     for(;p != fingerTips.end();) 
        { 

          p++; 

          secondfinger = *p; 

       distance += sqrt(double((forefinger.x - secondfinger.x) * 

(forefinger.x - secondfinger.x)+(forefinger.y - secondfinger.y)*(forefinger.y - secondfinger.y)));

   cvLine(source,forefinger,secondfinger,cvScalar(1.0,1.0,1.0),3,8); 

       forefinger = secondfinger; 

      } 
        } 
    } 

}

//作爲參數我通過指尖座標的矢量和手掌的與圖像源沿中心 但仍即時得到錯誤:「向量迭代不differefercable」 ... 在「secondfinger = * p;」的第二次迭代中發生錯誤線..... 請幫我.....

在這裏,我試圖讓每個手指之間的距離,並總結每個人拿到 最終距離....

請幫我...

回答

0

你需要在提升它之前取消p;否則,當到達集合的末尾時,最終會嘗試解除引用fingertips.end(),該集合無法取消引用。

for(;p != fingerTips.end(); ++p) 
{ 
    secondfinger = *p; 

    distance += sqrt(double((forefinger.x - secondfinger.x) * (forefinger.x - secondfinger.x) + (forefinger.y - secondfinger.y) * (forefinger.y - secondfinger.y))); 

    cvLine(source,forefinger,secondfinger,cvScalar(1.0,1.0,1.0),3,8); 

    forefinger = secondfinger; 

} 
0

你檢查p != end,然後P++,然後解引用。你應該只是做一個標準的for循環:

for(; p != fingerTips.end(); p++) 
{ 
    //p++ //This is gone now. It's up in the for loop 
    ... 
} 

,而不是在你的p++ for循環