2012-11-30 36 views
2

我正在使用opencv進行圖像校正,但希望使用c函數cvInitUndistortRectifyMap返回的地圖(mapx和mapy)自己執行映射(通常由cvremap完成)。 在這個過程中我發現奇怪的是,opencv只返回原始圖像大小的地圖opencv InitUndistortRectifyMap地圖大小

這意味着在原始圖像映射到其大小之外的區域,糾正的圖像只是被截斷,因爲映射只是圖像的大小?! 你可以得到一個完整的映射,所以你得到整個糾正後的圖像,而不是原始圖像(大小)內的部分?

回答

1

不僅僅是圖像大小的問題,原因是默認情況下,cvInitUndistortRectifyMap生成的圖僅指向源圖像中的有效像素。你想要的是獲得所有的像素。

爲此,您可以使用cvInitUndistortRectifyMapnewCameraMatrix參數。通過首先呼叫cvGetOptimalNewCameraMatrix(參見this link)並設置α參數獲得值newCameraMatrix。正如鏈接中所解釋的:

  • 如果alpha = 0,那麼未失真圖像中的所有像素都將是有效的(您現在正在獲取的)。
  • 如果alpha = 1,那麼所有的源圖像像素將保留在未失真的圖像(你想要的)。某些像素不匹配源圖像的任何位置,因此它們會變黑。

如果你願意,你可以改變與cvGetOptimalNewCameraMatrixnewImageSize參數經校正的圖像的期望的大小,但是這不會改變你的結果得到的像素。