【发布时间】:2015-09-26 20:32:54
【问题描述】:
我使用针孔相机模型校准了广角相机(水平约 120°,垂直约 110°)。结果相当不错,但图像的大部分区域被丢弃了。
所以我尝试使用 getOptimalNewCameraMatrix 函数(使用 alpha = 1)来计算 newCameraMatrix,然后将其传递给 cv::undistord,但结果帧确实失真了。
我使用的代码是:
// Matrices calculation
data.rms = calibrateCamera(objectPoints, imagePoints, data.size, data.cameraMatrix,
data.distCoeffs, data.rvecs, data.tvecs, settings.calibFlags);
if(!settings.cropCorrected) {
Rect roi;
data.newCameraMatrix = getOptimalNewCameraMatrix(data.cameraMatrix, data.distCoeffs,
data.size, 1, data.size, &roi, true);
}
// Undistort
cv::undistort(in, corrected, cameraMatrix, distCoeffs, newCameraMatrix);
这很简单,但有些东西不起作用。我已经尝试使用 roi 来裁剪内部区域,希望它会比没有附加矩阵的情况下更大,但实际上并非如此。
我该如何解决这种情况?
【问题讨论】:
-
很难帮助没有原始图像,校准参数值。您在校正后的图像中观察到的像素化圆是由于不失真函数中的奇异性造成的。由于似乎有超出它的有效像素,您可能使用了无效的模型,或校准参数不准确。
标签: c++ opencv matrix computer-vision camera-calibration