想法如何使用opencv for IOS测量检测到的物体与相机的距离?

Posted

技术标签:

【中文标题】想法如何使用opencv for IOS测量检测到的物体与相机的距离?【英文标题】:Ideas how can i measure distance of an detected object from Camera using opencv for IOS? 【发布时间】:2013-01-07 02:14:37 【问题描述】:

故事:

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

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

是否有一些公式或一些好主意或来自专业人士的解决方案? (如果您需要一些代码或其他东西,我可以向您展示您需要的所有东西)

感谢帮助和快速解答!^^

听到每个人的目标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 的解决方案

【问题讨论】:

对于类似的问题,请参阅 *** 上的 link,可能会有所帮助... 【参考方案1】:

我在图像处理/AR 方面做了一些工作,但肯定不会认为自己是专家。也就是说,让我们继续讨论我将如何解决这个问题:

如果您要计算一张脸的距离,您可以根据一张脸的平均大小来估算它。我的意思是,人脸的大小都非常相似(它们在任何方向上的偏差都不会超过几厘米)。因此,如果您进行一些测试,您可以计算出一张脸在几个距离处有多少像素,并使用 trig 来近似其他距离。显然,您无法使用此方法计算极其准确的距离,但您可以区分半米外的人和 3 米外的人。

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

更新

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

假设人脸宽 10 厘米

好的,让我们将相机对准一个直角的米棒。将相机握在 10 厘米远的地方。它看到了多少?假设它看到了 10 厘米的米尺。

现在将相机移动到 1 m 之外。假设它现在看到 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 确定面部检测点之间的距离(以像素为单位):***.com/a/12314320/716216顺便说一句! 嘿,谢谢这个例子,我和你有同样的想法,但你可能有一些真正的鳕鱼例子或其他东西,我使用的是标准 iphone 4s 不幸的是,我再也没有任何代码了。如果我今天有时间,我也许可以为你画一些伪代码。

以上是关于想法如何使用opencv for IOS测量检测到的物体与相机的距离?的主要内容,如果未能解决你的问题,请参考以下文章

在 android 中检测玩具车使用 opencv

python+opencv实现机器视觉基础技术(宽度测量,缺陷检测,医学处理)

检测手上的手指

在 iOS 上使用 OpenCV 跟踪检测到的人脸

如何使用适用于 iOS 的 openCV 检测视频中的正方形?

如何测量相机与物体之间的距离