2013-01-16 123 views
4

我是OpenCV的新手,我構建了openCV並安裝了Qt,以成功運行示例http://code.google.com/p/opencvstereovision/source/checkout。結果是左右網絡攝像頭捕獲,並在校準之後爲兩者和深度圖校正圖像。我想要做以下事情。我將點擊一個對象來關注這些左側或右側圖像中的任何一個。然後,我想檢測另一個圖像中的相應像素並計算與此對象的距離。我現在不知道該怎麼做,我需要指導。也許如果我首先計算出相應的點,我可能會將其餘的工作。我怎樣才能做到這一點?OpenCV立體相機,檢測物體距離

回答

4

這似乎是你真實需要什麼的一個好主意。這是一個蠕蟲的罐頭 - 因此,我會建議抓住着名的哈特利& Zisserman書的規範解釋。這裏是相關章節的link

但在短暫的...

我沒有用的opencvstereovision包裝類直接,但它聽起來像它已採取頭痛了校準的(相機內在和外部參數),並通過單應計算整改矩陣(H)用於平面幾何,或基礎矩陣(F)用於更復雜的對極幾何。

可能與此原始post相似。

這種糾正意味着它已經建立了每幅圖像中相同點之間的數學映射。

在之前的answer(來自我)中,您可以通過使用基礎矩陣來執行三角測量 - 即計算距離。

但是,請注意,此距離僅在圖像座標系(即以像素爲單位)中。

什麼是真正需要執行「真實世界」的測量(即實際的物理距離)的本質是矩陣(E),它結合了基本矩陣和攝像機內部函數(K)來計算,如果你願意,將距離投射到現實世界中。

+0

謝謝你。我提到的鏈接是第12章的確切實現,在本書中有詳細解釋。我想cvComputeCorrespondEpilines,也就是第427頁提到的,是需要的嗎?我會通過一個圖像中的像素,並找到相應的其他圖像? – dramaticlook

1
class StereoVar 
{ 
StereoVar(); 
StereoVar( int levels, double pyrScale, 
           int nIt, int minDisp, int maxDisp, 
           int poly_n, double poly_sigma, float fi, 
           float lambda, int penalization, int cycle, 
           int flags); 
virtual ~StereoVar(); 

virtual void operator()(InputArray left, InputArray right, OutputArray disp); 

int  levels; 
double pyrScale; 
int  nIt; 
int  minDisp; 
int  maxDisp; 
int  poly_n; 
double poly_sigma; 
float fi; 
float lambda; 
int  penalization; 
int  cycle; 
int  flags; 

... 
}; 

參考:http://docs.opencv.org/modules/contrib/doc/stereo.html

+0

可以請你分享任何示例代碼來製作分區地圖。我看到了stereo_match.cpp示例代碼..但沒有解釋,所以它真的聽到了解 – MMH