` `void calc_distance( fingerTips向量,CvPoint palmCenter,IplImage *palmCenter){双倍距离= 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) * (前指.x-秒指.x)+(前指.y-秒指.y)*(前指.y-秒指.y) );
cvLine(source,forefinger,secondfinger,cvScalar(1.0,1.0,1.0),3,8);
forefinger = secondfinger;
}
}
}}
//作为参数,我传递了指尖坐标的向量和手掌的中心以及图像源,但仍然收到错误:“向量迭代器没有差分”...错误出现在第二次迭代中的“secondfinger = *p;”行.....请帮帮我……
在这里,我试图得到每个手指之间的距离,并将每个手指的距离相加,以获得最终的距离。
请帮帮我。
发布于 2012-02-28 03:21:01
检查p != end,然后检查P++,然后取消引用。你应该只做一个标准的for循环:
for(; p != fingerTips.end(); p++)
{
//p++ //This is gone now. It's up in the for loop
...
}而不是在for循环中使用p++
发布于 2012-02-28 03:18:25
在递增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;
}https://stackoverflow.com/questions/9470825
复制相似问题