在 OpenCV calibrateCamera cameraMatrix 和 distCoeffs 参数中使用什么作为输入?
What to use as inputs in OpenCV calibrateCamera cameraMatrix and distCoeffs parameters?
我正在尝试让 calibrateCamera 在我的 Node.js 后端上运行。该库工作正常,但我遇到了 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]
);
根据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];
我正在尝试让 calibrateCamera 在我的 Node.js 后端上运行。该库工作正常,但我遇到了 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]
);
根据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];