Measuring distance between 2 points with OpenCV and OpenNI

狂风中的少年 提交于 2019-12-04 19:06:43
  1. I ran the code but I couldn't make it crash even when I commented out if(sp == 255 && ep == 255). Does it happen often? I haven't worked with the OpenNI drivers, but in the Microsoft drivers for example there is also an invalid value (for example when the surface is specular). There are also different values for 'too near' or 'too far'. Could it be that OpenNI returns garbage in a case like that?

  2. Try switching x's and y's:

    Vec3f s = real.at<Vec3f>(startPt.y, startPt.x);        
    Vec3f e = real.at<Vec3f>(endPt.y, endPt.x);        
    

(and consequently:)

unsigned int sp = valid.at<unsigned char>(startPt.y, startPt.x);
unsigned int ep = valid.at<unsigned char>(endPt.y, endPt.x);

The syntax is cv::Mat::at<_Tp>(int y, int x) or if it helps you better cv::Mat::at<_Tp>(int row, int column) I measured some distances and it worked fine for me.

Also, you actually calculate the 3D points and the distance for every frame that you get, is that on purpose? Because even though you choose two 2D points in the image once, the corresponding 3D points that you use to calculate the distance may change in every frame due to noise.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!