相機標定中的幾個函數:
雙目標定函數
stereoCalibrate
double cv::stereoCalibrate
(
InputArrayOfArrays objectPoints, //表示物點座標,由棋盤格生成的,Z=0.
InputArrayOfArrays imagePoints1, //相機1中的像點座標
InputArrayOfArrays imagePoints2, //相機2中的像點座標
InputOutputArray cameraMatrix1, //相機1內參數
InputOutputArray distCoeffs1, //相機1畸變係數
InputOutputArray cameraMatrix2, //相機2內參數
InputOutputArray distCoeffs2, //相機2畸變係數
Size imageSize, //圖像大小
InputOutputArray R, //相機1與相機2之間的旋轉矩陣
InputOutputArray T, //相機1與相機2之間的轉移矩陣
OutputArray E, //本質矩陣
OutputArray F, //基礎矩陣
OutputArray perViewErrors, //RMS重新投射點的誤差
int flags = CALIB_FIX_INTRINSIC, //標誌位,缺省爲0,可以自主設定
TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 1e-6) //迭代結束標誌
)
可以先通過其它方法把相機的內參數搞定,傳入到該函數裏面去計算其它的參數。也可以直接計算所有的參數。
雙目校正函數
void cv::stereoRectify
(
InputArray cameraMatrix1, //相機1內部參數
InputArray distCoeffs1, //相機1畸變參數
InputArray cameraMatrix2, //相機2內部參數
InputArray distCoeffs2, //相機2畸變參數
Size imageSize, //圖像大小
InputArray R, //相機1與相機2之間的旋轉矩陣
InputArray T, //相機1與相機2之間的平移矩陣
OutputArray R1, //相機1與世界座標系之間的旋轉矩陣3*3
OutputArray R2, //相機2與世界座標系之間的旋轉矩陣
OutputArray P1, //相機1的投影矩陣3*4
OutputArray P2, //相機2投影矩陣
OutputArray Q, //視差到深度的映射矩陣4*4
int flags = CALIB_ZERO_DISPARITY, //標誌位
double alpha = -1, //縮放係數
Size newImageSize = Size(), //新圖像大小
Rect * validPixROI1 = 0, //有效像素區域1
Rect * validPixROI2 = 0 //有效像素區域2
)
flags 缺省爲CALIB_ZERO_DISPARITY,也可以設爲0,設爲0時使每個相機的主點在校正後的圖像裏具有相同的座標。如果不設,圖像可以在水平和豎直方向上移動具有更大的可用區域。
校正映射函數
void cv::initUndistortRectifyMap
(
InputArray cameraMatrix, //相機內參數
InputArray distCoeffs, //畸變係數
InputArray R, //旋轉矩陣R1或R2
InputArray newCameraMatrix, //投影矩陣P1
Size size, //圖像大小
int m1type, //數據類型
OutputArray map1, //x方向映射矩陣
OutputArray map2 //y方向映射矩陣
)
remap
void cv::remap
(
InputArray src, //源圖像
OutputArray dst, //目標圖像
InputArray map1, //用於x座標的映射矩陣
InputArray map2, //y座標的映射矩陣
int interpolation, //插值標誌位,插值方法
int borderMode = BORDER_CONSTANT, //邊界模式
const Scalar & borderValue = Scalar() //邊界爲常值時的像素值,缺省爲0,也就是黑點
)