代码之家  ›  专栏  ›  技术社区  ›  ekuusi

在OpenCV CalibleCamera cameraMatrix和DistCoefs参数中使用什么作为输入?

  •  0
  • ekuusi  · 技术社区  · 6 年前

    我正在尝试让calibrateCamera在我的节点上工作。js后端。该库工作正常,但如果输入错误,OpenCV函数不会给出任何错误消息,这让我很头疼。我在黑暗中飞翔。

    但这不是重点。我已经拍摄了17张棋盘校准图案的图像,并获得了在所有图像中检测图案的代码。在我给简历打电话之前,一切都很好。CalibleCamera(),可能是因为我不知道应该使用什么作为cameraMatrix和distCoeff(第4和第5个输入参数)所需的输入。然而,我不能百分之百地否认这是一个问题,因为我没有从简历中收到任何错误信息。。。功能。

    我试着在 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 回复  |  直到 6 年前
        1
  •  1
  •   Tomasz Wiśniewski    6 年前

    根据 test 参数的传递方式如下:

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

    哪里

    常量\u cameraMatrix=新cv。垫子([ [800, 0, 100], [0, 800, 100], [0, 0, 1] ],cv。CV\U 64F);

    常数距离系数=[0,0.5,1.0,1.0];