2013-01-24 33 views
2

我使用OpenCVs solvePnP讓相機的姿態/現在的位置。 我通過使用由用戶選擇的,在圖像上的點在已校準的和已申請的徑向和切向畸變修復這樣做。OpenCV的solvePnP barreldistoriton

然而,看起來solvePnP()除了在圖像中選擇的點之外還將失真係數作爲輸入,我認爲這意味着SolvePnP將失真固定應用於作爲給定函數的給定點。

這會在我的程序中產生一個小錯誤,因爲源圖像已經是桶形失真了,對吧?

如果是這樣,我怎麼能做出solvePnP()忽略barreldistortion?我可以傳遞一個矢量,將失真係數設置爲1嗎?或者我應該將所有值設置爲0? 其他一些方法?

回答

4

在過去,我剛剛通過了一個空的簡歷::墊

cv::solvePnP(world_points, image_points, camera_mat, cv::Mat(), rotation_vector, translation_vector); 

documentation說,如果你傳遞NULL,將設置所有的係數爲0爲您服務。

+1

啊,當然。我應該更好地閱讀文檔。 謝謝。 另一個問題:關於camera_mat,如果我使用initUndistortMap()+ remap()已經校正過的圖像,那麼哪種相機矩陣最適合作爲solvepnp的輸入?來自校正的相機矩陣,還是一個簡單的Mat :: eye()? –

+0

更換'CV ::墊()'和'CV :: noArray()'有相同的效果反而使得意圖一點點清晰。 – Aurelius

+0

@HenrikKjusAlstad照相機矩陣(稱爲C)MAPPS 3D世界座標到2D圖像座標。 solvePnP本質上返回一個變換(稱之爲T),使得C * T * world_coordinate = image_coordinate達到其最佳能力。您的相機矩陣由相機內部參數定義 – Hammer

相關問題