[英]calculate Object Points in OpenCV CameraCalibration function
我想使用opencv Cameracalibration功能( calibrateCamera()
)來校准我的相機。
根據opencv文件 ,我必須拍攝至少10張我的棋盤。
但是當我想計算objectPoints
(這里是棋盤內點的位置)時,我objectPoints
困惑:
如果原點是相機並且棋盤正在移動,我很容易理解概念的理論基礎但很難計算objectPoints
。
第二種方法是固定棋盤並移動相機。但在這個解決方案中,我不明白如何在計算objectPoints
或任何其他方式對opencv相機校准功能這個應用距離棋盤的距離改變距離和方向。
如果你能幫助我解決我的問題,我將不勝感激。
您提到的第二種方法是最受歡迎的,因為它非常易於使用。
假設您有以下(9,6)
棋盤,其中正方形的長度為a
:
(來源: opencv.org )
然后,您只需按如下方式定義對象點:
// 3D coordinates of chessboard points
std::vector<cv::Point3f> objectPoints;
for(int y=0; y<6; ++y) {
for(int x=0; x<9; ++x)
objectPoints.push_back(cv::Point3f(x*a,y*a,0));
}
// One vector of chessboard points for each chessboard image
std::vector<std::vector<cv::Point3f>> arrayObjectPoints;
for(int n=0; n<number_images; ++n)
arrayObjectPoints.push_back(objectPoints);
基本上,由於您可以根據需要選擇3D坐標系,因此您可以選擇使用棋盤坐標系,這使得對象點很容易定義。 然后, calibrateCamera
函數將負責估計每個圖像的一個R,t(相對於所選坐標系的相對方向和平移),以及一個內在矩陣K和所有圖像共有的失真系數D.
另外,請注意對2D點使用相同的順序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.