什么用作OpenCV calibrateCamera cameraMatrix和distCoeffs参数的输入?

时间:2018-05-17 12:06:29

标签: node.js opencv opencv3.0 camera-calibration

我正在尝试使用我的Node.js后端的calibrateCamera。该库工作正常,但是如果输入错误,我在使用OpenCV函数时没有给出任何错误消息。我有点在黑暗中飞行。

但这不是重点。我拍摄了17张棋盘校准图案的图像,并获得了检测所有图像中图案的代码。一切正常,直到我调用cv.calibrateCamera(),可能是因为我不知道我应该使用什么作为cameraMatrix和distCoeff(第4和第5个输入参数)的必需输入。但是,我不能100%这是问题,因为没有从cv ...函数中的错误中收到任何错误消息。

我尝试按照https://docs.opencv.org/3.1.0/dc/dbb/tutorial_py_calibration.html的示例进行操作,但是在本教程的python中,您可以使用None作为cameraMatrix和distCoeff的输入。我试图使用null,但这也不起作用。

任何帮助都将不胜感激。

const size = new cv.Size(9,6);
  let mat = null;

  let objpt = [];
  for(let i=0;i<9;i++) {
    for(let j=0;j<6;j++) {
      objpt.push(cv.Point(2.5*i,2.5*j,0))
    }
  }

  let objectPoints = [];
  let imagePoints =[];

  for (let i=0; i < 17;i++) {
    mat = cv.imread('./calib/calib'+(i+1)+'.jpg');
    let smallmat = mat.resize(756,1008);
    const corners = smallmat.findChessboardCorners(size);
    if (corners.returnValue) {
      objectPoints = objectPoints.concat(objpt);
      imagePoints = imagePoints.concat(corners.corners);
    }
  }

 // THIS IS WHERE EXECUTION JUST STOPS WITH NO ERROR MESSAGE

  cv.calibrateCamera(
    objectPoints,
    imagePoints,
    new cv.Size(756,1008),
    new cv.Mat(3, 3, cv.CV_32FC1,0),
    [0,0,0,0,0]
  );

1 个答案:

答案 0 :(得分:1)

根据test参数应该这样传递:

 [_objectPoints, _objectPoints],
 [imagePoints, imagePoints],
 imageSize,
 _cameraMatrix,
 distCoefficients

其中

  

const _cameraMatrix = new cv.Mat([        [800,0,100],        [0,800,100],        [0,0,1]      ],cv.CV_64F);

  

const distCoefficients = [0,0.5,1.0,1.0];