2012-02-27 15 views
2

`void calc_distance(vector fingerTips、CvPoint palmCenter、IplImage * source) { double distance = 0;ベクトル反復子dereferncable ....?

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)))。 「ベクターイテレータdifferefercableない」:私は指先座標のベクトルとイメージソース と一緒に、手のひらの中央部を通過したが、まだエラーを取得イムパラメータとして

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

       forefinger = secondfinger; 

      } 
        } 
    } 

}

// .... "secondfinger = * p;"の2回目の繰り返しでエラーが発生しました。ライン..... は、ここで私は、各指の間の距離を取得しようと 最終的な距離を得るためにそれらのそれぞれを加算しています.....

を助けてください....

ください。助けてください...

答えて

0

pを増分する前に逆参照する必要があります。そうしないと、コレクションの終わりに達したときに逆参照しようとしてしまいます。逆参照できません。

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++そして、p != endを確認してください。代わりにあなたのループ

ためで p++を持つの

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

:あなただけのループのための標準を行う必要があります

関連する問題