2013-06-23 62 views
2

我使用2個相機的opencv(左側的低分辨率攝像機和右側的高分辨率攝像機)成功校準了內部函數和外部函數。我從2組圖像(棋盤圖案 - 每個相機約20張圖像)校準立體聲。我現在有一個left.yml,right.yml和一個translationRotation.yml。現在,我想扭曲/扭曲右側圖像,使其看起來與左側圖像相同(透視/扭曲/等)。我知道我有來自校準的所有數據,只知道如何使用正確的opencv函數來執行操作 - 例如。 warpPerspective,重映射還是別的?opencv立體聲校準 - >將相機圖像A轉換爲相機圖像B

背景信息 - 我基本上用高分辨率rgb相機饋送(右)代替低分辨率rgb相機饋送(左)。使用Openframeworks/C++和ofxCv。

謝謝。

回答

2

如果我理解正確,每個相機都有不同的失真,並且您想不失真地對其中一個失真並應用其他相機的失真。對於不失真的部分,這是我過去所做的。

使用OF上設置您可以創建失真/ undistortion地圖,使用cv::initUndistortRectifyMap,這將使你在cv::Mat對象的形式兩張地圖。該功能從校準中接收相機矩陣和失真係數。

然後,您可以使用cv::remap來應用映射。其中將結果存儲在其第二個參數中。

經過不扭曲,你會想應用逆映射,應用其他相機的失真。看起來你提到的warpPerspective函數可以很好地工作,但映射可能可以從你得到的.yml文件中計算出來。這只是一個應用相反映射的問題。

使用ofxCV's wrapping從圖像切換到墊,只要有必要確保您沒有不必要的副本。