2014-02-24 162 views
5

我對OpenCV非常陌生,在OpenGL上的經驗有限。我願意在棋盤的校準圖像上覆蓋3D對象。任何提示或指導?增強現實OpenGL + OpenCV

+1

你是什麼意思的「校準」?你的意思是棋盤上每個方格的每一邊的長度與一些有用的測量有關(即1邊長= 1英尺/英寸/米/等)? – redsoxfantom

+0

我的意思是我正在進行相機校準,棋盤是校準對象。現在我想要的是使用openGL在校準對象上渲染2D或3D對象。 – user3303396

+0

啊,好的。對不起,我不知道太多可以幫到你,試試scap3y的回答 – redsoxfantom

回答

13

基本的想法是,你有2個攝像頭:一個是物理的(你用opencv回想圖像的那個),另一個是opengl。你必須對齊這兩個矩陣。

要做到這一點,您需要校準物理相機。

首先。您需要一個失真參數(因爲每個透鏡或多或少都有一些光學失真),並用這些參數構建所謂的內部參數。您可以在一張紙上打印棋盤,使用它獲取一些圖像並校準相機。它充滿了關於互聯網上的很好的教程,從你的答案看來你有他們。這很好。

然後。你必須校準相機的位置。這是通過所謂的外部參數完成的。這些參數編碼位置和旋轉這些相機的3D世界。

內部參數由OpenCV的方法cv::solvePnPcv::Rodrigues和使用該羅德里格斯方法獲取外部參數需要。該方法獲取輸入2組對應點:一些3D知識點及其二維投影。這就是爲什麼所有的增強現​​實應用都需要一些標記:通常標記是方形的,所以在檢測到它後,您知道點P1(0,0,0)P2(0,1,0)P3(1,1, 0)P4(1,0,0)形成一個正方形,你可以找到飛機躺在它們上面。

一旦你擁有了外在參數,所有的遊戲都很容易解決:你只需在OpenGL中用FoV和攝像機的內角參數進行透視投影,並將攝像機置於外在參數。

當然,如果你想(你應該)理解和正確處理這個過程的每一步。再次有很多數學 - 矩陣,角度,四元數,矩陣和..矩陣。您可以在着名的Multiple View Geometry in Computer Vision from R. Hartley and A. Zisserman.中找到參考

此外,爲了正確處理opengl部分,您必須處理所謂的「Modern OpenGL」的相機位置(對我來說這是一個問題,因爲我不知道這件事)。

我已經處理了這個前幾次,我有一些代碼,所以隨時問你有任何問題。這裏是一些鏈接,我發現興趣:

  1. http://ksimek.github.io/2012/08/14/decompose/(真的很好的解釋)
  2. Camera position in world coordinate from cv::solvePnP(我提出的問題有關)
  3. http://www.morethantechnical.com/2010/11/10/20-lines-ar-in-opencv-wcode/(約計算機視覺神話般的博客)
  4. http://spottrlabs.blogspot.it/2012/07/opencv-and-opengl-not-always-friends.html(好的技巧) http://strawlab.org/2011/11/05/augmented-reality-with-OpenGL/
  5. http://www.songho.ca/opengl/gl_projectionmatrix.html(OpenGL的相機設置基礎很好的解釋)
  6. 其他一些隨機有用的東西: http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html(文檔,總是看文檔!) Determine extrinsic camera with opencv to opengl with world space object Rodrigues into Eulerangles and vice versa Python Opencv SolvePnP yields wrong translation vector http://answers.opencv.org/question/23089/opencv-opengl-proper-camera-pose-using-solvepnp/

請任何事情之前閱讀。像往常一樣,一旦你得到了這個概念,這是一個簡單的笑話,需要把你的大腦撞上牆壁。只是不要害怕從所有這些數學:)

+0

嘿,我試着按照你的指示,但我遇到了一個問題,你介意看看[我的帖子](https:// stackoverflow.com/q/44313684/896112)? – Carpetfizz