Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带有newCameraMatrix的OpenCV undistort()函数_C++_Opencv_Matrix_Computer Vision_Camera Calibration - Fatal编程技术网

C++ 带有newCameraMatrix的OpenCV undistort()函数

C++ 带有newCameraMatrix的OpenCV undistort()函数,c++,opencv,matrix,computer-vision,camera-calibration,C++,Opencv,Matrix,Computer Vision,Camera Calibration,我用针孔相机模型校准了一个广角相机(~120°水平,~110°垂直)。结果非常好,但图像的大面积被丢弃 因此,我尝试使用getOptimalNewCameraMatrix函数(使用alpha=1)计算newCameraMatrix,然后将其传递给cv::Undords,但结果帧确实失真 我使用的代码是: // Matrices calculation data.rms = calibrateCamera(objectPoints, imagePoints, data.size, data.c

我用针孔相机模型校准了一个广角相机(~120°水平,~110°垂直)。结果非常好,但图像的大面积被丢弃

因此,我尝试使用getOptimalNewCameraMatrix函数(使用alpha=1)计算newCameraMatrix,然后将其传递给cv::Undords,但结果帧确实失真

我使用的代码是:

// 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来裁剪内部区域,希望它无论如何都比没有附加矩阵的情况下更大,但事实并非如此


我怎样才能解决这个问题呢?

好的,我已经解决了。问题是alpha=1.0太大了。奇怪的是,即使使用0.0,新的CameraMatrix也会将视野放大约20°,显然不会出现错误的像素或失真。

如果没有原始图像和校准的参数值,很难提供帮助。在校正图像中观察到的像素化圆是由于未失真函数中的奇异性造成的。因为在它之外似乎有有效的像素,你可能使用了无效的模型,或者校准参数不准确。嗨,我也遇到了同样的问题。我试图将alpha设置为0.5或0.0,但没有解决问题。请看