1
我試圖使用OpenCV的solvePnPRansac()
來計算3D物體的已知2D投影。我的數值(固有攝像機參數,模型點(3D),圖像點(2D))都是雙值。正常的solvePnP()
並不抱怨。solvePnPRansac如何與double值一起使用?
但是,當我嘗試使用solvePnPRansac,它產生的錯誤信息:
斷言失敗< opoints.depth()== CV_32F>
如何使用這個功能雙重價值? (與浮動工作不會給出預期的結果)
這兩個函數的文檔都指定它們使用cv :: Point2f/3f。我不知道如何避免自己改變源代碼。你真的需要那麼多的精度數字嗎?你使用Ransac的事實表明你的數據有一些噪音,這意味着雙精度是過度的。 – Hammer 2012-07-24 21:56:38
好點。爲什麼我想讓Ransac版本工作的主要動機是正常的solvePnP()給出了具有double值的視覺上很好的結果,但是沒有float值(視覺上=當我使用報告的旋轉和平移來計算背投影時),但不知何故旋轉矩陣似乎是「錯誤的」,因爲它與使用POSIT算法時的結果非常不同。 – Niko 2012-07-25 11:08:16
使用浮動體時,您測試了多少「錯誤」行爲?當使用這樣的算法時,我喜歡通過生成一組3d點來進行測試,應用已知的變換和投影來獲得2d點,然後將這些點饋送到算法中,以查看它是否可以重新創建我的變換。這可以讓你看到究竟有什麼錯誤,並一次測試你的自由度1。這應該給你一個更好的想法是什麼問題。我懷疑這個問題是使用單精度。 – Hammer 2012-07-25 16:53:20