OpenCV3.2.0 双目标定+立体匹配(官方自带例子的使用方法)
1.设置stereo_calib.cpp运行路径
转载: https://blog.csdn.net/roslei/article/details/78673657
int main(int argc, char** argv)
{
Size boardSize;
string imagelistfn;
bool showRectified;
cv::CommandLineParser parser(argc, argv, “{w|9|}{h|6|}{s|1.0|}{nr||}{help||}{@input|E:/vsdemo/stereo_calib_opencv/stereo_calib/stereo_calib/stereo_calib.xml|}”);
if (parser.has(“help”))
return print_help();
需要修改成{@input|D:/…/stereo_calib/stereo_calib/stereo_calib.xml|}");格式
写路径时注意 一定要使用“/” 。
2.编译好代码,来看看运行参数
转载: https://blog.csdn.net/LEOLUZE/article/details/79709536
“Usage:\n ./stereo_calib -w=<board_width default=9> -h=<board_height default=6> -s=<square_size default=1.0> <image list XML/YML file default=…/data/stereo_calib.xml>\n”
**-w -h -s默认参数是9 6 1.0,**坑就在这里,习惯地以为这是棋盘格的格子数目,但是仔细去查阅代码里面的这个函数
findChessboardCorners(timg, boardSize, corners,
CALIB_CB_ADAPTIVE_THRESH | CALIB_CB_NORMALIZE_IMAGE);
之前打log发现是这个函数找不到角点,但是确认自己格子是12*9的,格子大小是3cm(也就是这个s的单位,根据自己标定板的每个小格子大小来改).而w h(对于函数里面的boardsize),它并不是格子数目!而是格子内的交点数目!比如说下面这个棋盘格,在这个函数里面的参数应该就是-w=11,-h=8.
3. EuRoC.yaml参数设定
参考:
https://blog.csdn.net/zc850463390zc/article/details/48975263
https://blog.csdn.net/xiaoxiaowenqiang/article/details/79687144
4.注意:
4.1报错:
error: (-212) Examples/Stereo/EuRoC.yaml(85): Incorrect indentation in function icvYMLSkipSpaces
解决方法:按照标准格式配置EuRoC.yaml文件,一定要注意不能有中文半角下的空格、回车。
4.2事先标定好的右相机的内参矩阵
/事先标定好的右相机的内参矩阵
fx 0 cx
0 fy cy
0 0 1/
Mat cameraMatrixR = (Mat_(3, 3) << 296.92709649579353, 0, 313.1873142211607,
0, 300.0649937238372, 217.0722185756087,
0, 0, 1);
Mat distCoeffR = (Mat_(4, 1) << -0.23753878535018613, 0.03338842944635466, 0.0026030620085220105, -0.0008840126895030034);
4.2.2
#stereo baseline times fx
Camera.bf: 47.90639384423901