2013-01-23 36 views
4

故事:想法如何測量從相機使用opencv IOS檢測到的對象的距離?

我已經是人臉檢測的應用程序建立與iPhone的SDK 6.0的每一件事情OpenCV的工作我可以使用前CAMER和「相機背面」還我可以打開/關閉的火炬我可以顯示我現在有多少fps(直播)。

,但現在我想添加一個附加功能,你可以看到如何票價遠是這張臉

enter image description here

是有一些公式或一些好的想法或埃文從一家親的解決方案? (如果你需要一些代碼什麼的,我可以告訴你,你需要的每一件事情)

THX的幫助,快速解答!^^

聽到的是爲每一個目標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

+0

對於類似的問題請參閱此鏈接(http://stackoverflow.com/questions/8698889/how-to-measure-height-width-and-distance-of-object-using-camera)在stackoverflow ,可能有幫助... – Haris

回答

4

我已經做了在圖像處理/ AR一些工作,但肯定不會認爲自己是一個專家的解決方案。這就是說讓我們繼續討論如何處理這個問題:

如果你正在計算一張臉的距離,你可以根據臉部的平均大小來估計它。我的意思是說人臉在大小上都很相似(它們在任何方向上的偏差都不會超過幾釐米)。因此,如果您進行一些測試,您可以計算出幾個距離處的臉部像素數量,並使用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; 
} 

應該工作。我沒有測試過它,但數學上它似乎是正確的。

+1

這只是提問者的一個提示,但我有一個基本的例子來說明如何使用CIDetector在這裏確定面部檢測點之間的距離(以像素爲單位):http://stackoverflow.com/a/12314320/716216 +1方式! –

+0

謝謝這個例子我有和你一樣的想法,但你也許有一些真正的鱈魚的例子或什麼,我使用我的標準iphone 4s – Mingebag

+0

不幸的是,我沒有任何代碼可以躺在附近。如果我今天有空,我可能會爲你畫出一些僞代碼。 –