Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用opencv for IOS测量检测到的对象和相机的距离?_Ios_Objective C_Xcode_Opencv - Fatal编程技术网

如何使用opencv for IOS测量检测到的对象和相机的距离?

如何使用opencv for IOS测量检测到的对象和相机的距离?,ios,objective-c,xcode,opencv,Ios,Objective C,Xcode,Opencv,故事: 我有一个应用程序,可以检测iphone sdk 6.0上opencv构建的人脸。一切正常。我可以使用前置摄像头和“后置摄像头”,还可以打开/关闭手电筒。我可以显示当前的fps(实时) 但现在我想添加一个额外的功能,您可以看到这张脸有多遥远 是否有一些公式或一些好的想法或专家的解决方案? (如果您需要一些代码或其他东西,我可以向您展示您需要的所有东西) Thx提供帮助和快速答案!^^ hear是每个人对目标c的翻译 -(double) faceDistance{ const NS

故事:

我有一个应用程序,可以检测iphone sdk 6.0上opencv构建的人脸。一切正常。我可以使用前置摄像头和“后置摄像头”,还可以打开/关闭手电筒。我可以显示当前的fps(实时)

但现在我想添加一个额外的功能,您可以看到这张脸有多遥远

是否有一些公式或一些好的想法或专家的解决方案? (如果您需要一些代码或其他东西,我可以向您展示您需要的所有东西)

Thx提供帮助和快速答案!^^

hear是每个人对目标c的翻译

-(double) faceDistance{
    const NSInteger kFaceWidth = 10;
    const NSInteger kPicWidth = 640;
    CGPoint p1 = CGPointMake(10, 10);
    CGPoint p2 = CGPointMake(100, 70);
    int facePixelWidth;


    int slope = (p2.y - p1.y) / (p2.x - p1.x);

    double propOfPic = kPicWidth / facePixelWidth;
    double surfSize = propOfPic * kFaceWidth;
    double dist = surfSize / slope;

    return dist;
}

我已经更新了我的代码,这里是目标C.P/P> < P>的解决方案。我在图像处理/ AR方面做了一些工作,但肯定不会认为自己是专家。也就是说,让我们继续讨论我将如何处理这个问题:

-(double) faceDistance{
    const NSInteger kFaceWidth = 10;
    const NSInteger kPicWidth = 640;
    CGPoint p1 = CGPointMake(10, 10);
    CGPoint p2 = CGPointMake(100, 70);
    int facePixelWidth;


    int slope = (p2.y - p1.y) / (p2.x - p1.x);

    double propOfPic = kPicWidth / facePixelWidth;
    double surfSize = propOfPic * kFaceWidth;
    double dist = surfSize / slope;

    return dist;
}
若你们正在计算一张脸离你们有多远,你们可以根据一张脸的平均大小来近似计算。我的意思是人类的脸在大小上都非常相似(他们在任何方向上的偏差都不会超过几厘米)。所以,如果你做一些测试,你可以计算出一张脸在几个距离上有多少像素,并使用trig来近似其他距离。显然,你无法用这种方法计算出极其精确的距离,但你可以区分半米远的人和3米远的人

你需要知道你正在使用的相机的分辨率,并可能对每个可能的分辨率进行一些测试

更新

好的,我被要求再详细说明一下。在图片中看到的空间量与曲面离相机的距离成线性关系

假设一个人的脸有10厘米宽

好的,让我们把相机指向一个直角的米杆。拿着相机10厘米远。它能看到多少?假设它看到10厘米的米棒

现在将相机移到1米以外。假设它现在看到70厘米。使用此信息,我们可以生成以下Java:

public static final int FACE_WIDTH = 10;
public static final int PIC_WIDTH = 640; // In pixels
Point p1 = new Point(10,10);
Point p2 = new Point(100,70);
int slope = (p2.y-p1.y)/(p2.x-p1.x);

public static double faceDistance(int facePixelWidth)
{
    double propOfPic = PIC_WIDTH / facePixelWidth;
    double surfSize = propOfPic * FACE_WIDTH;
    double dist = surfSize / slope;
    return dist;
}

这应该行得通。我没有测试过它,但从数学上看它似乎是正确的。

这只是询问者的一个注意事项,但我有一个基本示例,说明如何使用CIDetector在这里确定面部检测点之间的距离(以像素为单位):+1!heey谢谢这个例子,我和你有相同的想法,但是你可能有一些真实的cod例子或者什么,我使用的是i standart iPhone4Sun幸运的是,我已经没有任何代码了。如果我今天有时间的话,我也许可以为你画一些伪代码。对于类似的问题,请看这个关于stackoverflow的文章,可能会有帮助。。。