使用OpenCV標定魚眼鏡頭(C )

2021-07-24 08:05:11 字數 2418 閱讀 4853

由於魚眼鏡頭和針孔鏡頭的模型不一樣,對於魚眼鏡頭的模型在之前的部落格中已經做了詳細介紹,這裡直接使用opencv中的cv::fisheye::calibrate()函式進行標定。函式原型如下,需要輸入目標點集,影象點集、影象尺寸。函式輸出相機內參,畸變係數,旋轉矩陣和平移向量,以及反投影誤差。

cv_exports double calibrate(inputarrayofarrays objectpoints, inputarrayofarrays imagepoints, const size& image_size,

inputoutputarray k, inputoutputarray d, outputarrayofarrays rvecs, outputarrayofarrays tvecs, int flags = 0,

termcriteria criteria = termcriteria(termcriteria::count + termcriteria::eps, 100, dbl_epsilon));

採集若干拍攝有標定棋盤格的影象,並使棋盤格出現在畫面的各個位置,特別是邊緣位置。如下圖所示:

cv::matx33d intrinsics;//z:相機內參

cv::vec4d distortion_coeff;//z:相機畸變係數

vector

> objectv;

vector

> imagev;

size corrected_size(1280, 720);

mat mapx, mapy;

mat corrected;

ofstream intrinsicfile("intrinsics_front1103.txt");

ofstream disfile("dis_coeff_front1103.txt");

int num = 0;

bool bcalib = false;

while (num < files.size())

}tempcorners.clear();

num++;

}cv::fisheye::calibrate(objectv, imagev, cv::size(image.cols,image.rows), intrinsics, distortion_coeff, cv::noarray(), cv::noarray(), flag, cv::termcriteria(3, 20, 1e-6));

fisheye::initundistortrectifymap(intrinsics, distortion_coeff, cv::matx33d::eye(), intrinsics, corrected_size, cv_16sc2, mapx, mapy);

for(int i=0; i<3; ++i)

intrinsicfile

intrinsicfile.close();

disfile.close();

num = 0;

while (num < files.size())

cv::destroywindow("corner_image");

cv::destroywindow("corrected");

image.release();

grayimage.release();

corrected.release();

mapx.release();

mapy.release();

return

0;}使用標定的結果進行畸變校正後的結果如下所示,可以看到,原本彎曲的曲線已經變直。

OPENCV原始碼閱讀 魚眼鏡頭標定

cv fisheye initundistortrectifymap inputarray k,inputarray d,inputarray r,inputarray p,const cv size size,int m1type,outputarray map1,outputarray map2...

opencv相機標定 3 魚眼鏡頭成像模型與標定

這篇部落格介紹得很詳細,鏈結 其中,opencv魚眼相機標定後,畸變引數是4個,鏈結裡部落格的畸變引數是五個,應該是使k0 1.1 世界座標系 相機座標系 2 相機座標系 影象物理座標系 注意使用的是歸一化的座標,魚眼模型好像都是近似為單位球面投影模型,這點還是比較困惑,為什麼不直接用f,而是在單位...

OpenCV3 1 0魚眼相機標定及畸變校正

常用的相機模型為針孔模型,此模型在視場較小的情況下是適用的,隨著視場的增加,模型誤差越來越大。普通鏡頭和魚眼鏡頭成像原理的差異是造成此現象的根本原因。具體原理可以參見 1 2 juho kannalaand sami s.brandt.a generic camera model and calib...