我使用针孔相机模型校准了一台广角相机(水平约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来裁剪内部区域,希望它无论如何都要比没有额外的矩阵更大,但事实上它不是。
我该如何解决这个问题?
答案 0 :(得分:0)
好的,我明白了。问题是alpha = 1.0太大了。奇怪的是,即使使用0.0,newCameraMatrix也会放大~20°的视野,并且显然没有错误的像素或失真。