簡體   English   中英

在OpenCV CameraCalibration函數中計算對象點

[英]calculate Object Points in OpenCV CameraCalibration function

我想使用opencv Cameracalibration功能( calibrateCamera() )來校准我的相機。
根據opencv文件 ,我必須拍攝至少10張我的棋盤。
但是當我想計算objectPoints (這里是棋盤內點的位置)時,我objectPoints困惑:

如果原點是相機並且棋盤正在移動,我很容易理解概念的理論基礎但很難計算objectPoints
第二種方法是固定棋盤並移動相機。但在這個解決方案中,我不明白如何在計算objectPoints或任何其他方式對opencv相機校准功能這個應用距離棋盤的距離改變距離和方向。

如果你能幫助我解決我的問題,我將不勝感激。

您提到的第二種方法是最受歡迎的,因為它非常易於使用。

假設您有以下(9,6)棋盤,其中正方形的長度為a

opencv校准棋盤
(來源: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM