2012-07-24 49 views
1

我試圖使用OpenCV的solvePnPRansac()來計算3D物體的已知2D投影。我的數值(固有攝像機參數,模型點(3D),圖像點(2D))都是雙值。正常的solvePnP()並不抱怨。solvePnPRansac如何與double值一起使用?

但是,當我嘗試使用solvePnPRansac,它產生的錯誤信息:

斷言失敗< opoints.depth()== CV_32F>

如何使用這個功能雙重價值? (與浮動工作不會給出預期的結果)

+0

這兩個函數的文檔都指定它們使用cv :: Point2f/3f。我不知道如何避免自己改變源代碼。你真的需要那麼多的精度數字嗎?你使用Ransac的事實表明你的數據有一些噪音,這意味着雙精度是過度的。 – Hammer 2012-07-24 21:56:38

+0

好點。爲什麼我想讓Ransac版本工作的主要動機是正常的solvePnP()給出了具有double值的視覺上很好的結果,但是沒有float值(視覺上=當我使用報告的旋轉和平移來計算背投影時),但不知何故旋轉矩陣似乎是「錯誤的」,因爲它與使用POSIT算法時的結果非常不同。 – Niko 2012-07-25 11:08:16

+0

使用浮動體時,您測試了多少「錯誤」行爲?當使用這樣的算法時,我喜歡通過生成一組3d點來進行測試,應用已知的變換和投影來獲得2d點,然後將這些點饋送到算法中,以查看它是否可以重新創建我的變換。這可以讓你看到究竟有什麼錯誤,並一次測試你的自由度1。這應該給你一個更好的想法是什麼問題。我懷疑這個問題是使用單精度。 – Hammer 2012-07-25 16:53:20

回答

2

今天我已經測試了SolvePnPRAnsac,對於ITERATIVE和P3P的結果似乎是相同的,但是當我使用這些結果來呈現我的對象時,排序的圖像是非常與當前幀不同。 在EPnP選項的情況下,平移向量與ITERATIVE和P3P結果非常相似,但旋轉與其他兩個選項非常不同。然而,我從Epnp得到的渲染圖像效果很好,似乎P3P和ITERATIVE在實現算法時存在一些問題。

相關問題