OpenCV:相机标定函数和程序( 二 )


void drawChessboardCorners( InputOutputArray image,
Size patternSize, 
                         InputArray corners,//亚像素角点
bool patternWasFound ); 
第一个参数image, 8位灰度或者彩色图像;
第二个参数patternSize, 每张标定棋盘上内角点的行列数;
第三个参数corners, 输入亚像素坐标位置, 浮点型数据, 一般用元素是Pointf2f/Point2d的标的目的量来暗示:vector<Point2f/Point2d> iamgePointsBuf;
第四个参数patternWasFound, 标记位, 用来指示界说的棋盘内角点是否被完整的探测到, true暗示别完整的探测到, 函数会用直线依次毗连所有的内角点, 作为一个整体, false暗示有未被探测到的内角点, 这时辰函数会以圆圈标识表记标帜处检测到的内角点;
patternWasFound设置为true和false时内角点的绘制结果:ture时, 依次毗连各个内角点;false圆圈暗示;

OpenCV:相机标定函数和程序



OpenCV:相机标定函数和程序



OpenCV:相机标定函数和程序



OpenCV:相机标定函数和程序



2棋盘角点宿世界坐标系坐标:
以棋盘格左上角为宿世界坐标系原点, 成立宿世界坐标系,
则棋盘角点宿世界坐标系下的坐标计较, 如下:
/*棋盘三维信息*/ 
Size square_size = Size(10,10);  /* 每个棋盘格真实尺寸 */ 
vector<vector<Point3f>> object_points; /* 标定板上角点的三维坐标 */ 
/* 初始化标定板上角点的三维坐标 */ 
int i,j,t; 
for (t=0;t<image_count;t++)  

   vector<Point3f> tempPointSet; 
   for (i=0;i<board_size.height;i++)  
   { 
      for (j=0;j<board_size.width;j++)  
      { 
         Point3f realPoint;   /* 假设标定板放活着界坐标系中z=0的平面上 */ 
         realPoint.x = i*square_size.width;  //hang
         realPoint.y = j*square_size.height; //lie
         realPoint.z = 0; 
         tempPointSet.push_back(realPoint); 
       } 
    } 
    object_points.push_back(tempPointSet); 


OpenCV:相机标定函数和程序



3相机标定计较相机表里参数;
double calibrateCamera( InputArrayOfArrays objectPoints, 
                    InputArrayOfArrays imagePoints, 
                    Size imageSize,

猜你喜欢