好吧,我用棋盤圖像來校準我的相機。這校準了場景的內在和外在參數。現在我想繪製一個物體,坐在我放置棋盤的桌子上。我的問題是需要相機的旋轉+平移向量來做到這一點?如果是的話,如何在校準後得到這些信息?還是在calibrateCamera函數中考慮了這些矢量?如何使用opencv在視頻中放置對象
基本上,我校準相機後,我現在怎麼能畫到表面上的場景?
謝謝!
好吧,我用棋盤圖像來校準我的相機。這校準了場景的內在和外在參數。現在我想繪製一個物體,坐在我放置棋盤的桌子上。我的問題是需要相機的旋轉+平移向量來做到這一點?如果是的話,如何在校準後得到這些信息?還是在calibrateCamera函數中考慮了這些矢量?如何使用opencv在視頻中放置對象
基本上,我校準相機後,我現在怎麼能畫到表面上的場景?
謝謝!
calibrateCamera
函數爲您提供外在(旋轉+平移)和內在(相機矩陣K和失真係數)。
這允許您將用棋盤座標系表示的三維點投影到相機獲取的圖像中,例如使用projectPoints
函數(link)。使用這種方法,您可以通過使用projectPoints
函數投影3D邊緣來將線框對象直接繪製到圖像中。
如果你想渲染更復雜的對象(即包括紋理等),這需要使用輔助渲染引擎,因爲OpenCV不提供這樣的功能。您將不得不使用渲染引擎(比如OpenGL)提供投影細節,從相機視點渲染緩衝區中的對象,並將該緩衝區覆蓋在初始圖像上。
但是,請注意,這種稱爲增強現實的結果有時候可能看起來很奇怪,因爲它沒有考慮到渲染對象與圖像中觀察到的場景之間的遮擋...處理遮擋適當地將需要場景的3D模型。
AldourDisciple post是一個很好的答案。
如果我可以添加我的2美分,這是我一直在使用的問題,這是增強現實的基本問題,更一般地講如何集成OpenCV和OpenGL(因爲您將使用OpenGL繪製3D材質並使用OpenGL紋理顯示來自視頻的下劃線OpenCV圖像)。你可以在我的previous answer中找到一些(imho)良好的鏈接,文檔和教程。