2014-01-15 40 views
0

我目前在OpenCV文檔中丟失了,正在尋找一些關於函數的可能排序,或者OpenCV中的一個功能,我還沒有來到它的交叉...在OpenCV中使用失真係數與findHomography

我正在跟蹤投影屏幕上位置的攝像頭內的激光斑點。到目前爲止,我一直使用findHomography,然後使用projectTransform來完成這個任務,但是我使用的相機幾乎沒有失真。現在我正在使用具有明顯徑向失真的不同相機。我已經使用cvCalibrateCamera來獲取失真係數,相機矩陣等,但我不知道我應該如何使用這些數據與我當前的過程,或者我需要使用不同的功能和/或完全從OpenCV的功能排序。任何建議,將不勝感激......

我工作良好(無失真)當前的代碼如下:

Mat homog; 
homog = findHomography(Mat(vCameraPoints), Mat(vTargetPoints), CV_RANSAC); 

vector<Point2f> cvTrackPoint; 
cvTrackPoint.push_back(Point2f(pMapPoint.fX, pMapPoint.fY));       

Mat normalizedImageMat; 
perspectiveTransform(Mat(cvTrackPoint), normalizedImageMat, homog); 

Point2f normalizedImgPt; 
normalizedImgPt = Point2f(normalizedImageMat.at<Point2f>(0,0)); 
normalizedImgPt.x /= szCameraSize.fWidth; 
normalizedImgPt.y /= szCameraSize.fHeight; 

我那麼當然乘以normalizedImgPt到我的投影屏幕分辨率

所以再次,只是爲了澄清...我有什麼似乎是來自calibrateCamera的好數據,我將如何使用這些信息來考慮鏡頭失真?也許上述過程不會起作用,有什麼幫助?

感謝,提前

回答

1

如果您已經獲得了畸變係數,然後進行簡單的(但可能不理想)的方式來獲得回無失真的情況下將undistort圖像。未畸變的圖像是具有相似的內在和外在參數但沒有透鏡扭曲會獲得的相機。 相應的OpenCV功能是undistort

+0

感謝您的回覆..我明白你說的是什麼,但實際上不扭曲的圖像不會幫助我很多,因爲在正常操作期間實際上不顯示攝像頭饋送。我真的希望有一個像projectPoints或undistortPoints這樣的函數。我會知道feed/ROI內的x/y,並且只需要將扭曲值應用到知道的x/y上,以便它是正確的,等等。 但是,上述那些函數從對象空間投影到圖像空間的相機。另外,如果上述功能確實起作用,findHomography如何適應或者做到這一點? – KingCapybara

+0

好吧,我想我不確定你正在努力完成什麼,那麼你會不會更詳細地解釋它?因爲有一個'undistortPoints'函數,它似乎也能達到我想要的效果。另外,我不明白爲什麼在正常操作過程中是否顯示攝像機饋送。 – Olotiar

相關問題