我有一个广角相机,规格上说它大约是 150°,但对我来说似乎更多的是水平约 100°,垂直约 80°。无论如何,一旦校准,这些视场每个都会减少约 20 度。
对于 cv::calibrationMatrixValues 函数返回的值和校正帧都是如此,其中相对较大的外部部分被裁剪。
这种行为正常吗?如果是,我可以使用较新的鱼眼相机型号来避免这个问题吗?使用 Fisheye 是否可以知道测量的 FOV?我找不到像 fisheye::calibrationMatrixValues 这样的东西。
我有一个广角相机,规格上说它大约是 150°,但对我来说似乎更多的是水平约 100°,垂直约 80°。无论如何,一旦校准,这些视场每个都会减少约 20 度。
对于 cv::calibrationMatrixValues 函数返回的值和校正帧都是如此,其中相对较大的外部部分被裁剪。
这种行为正常吗?如果是,我可以使用较新的鱼眼相机型号来避免这个问题吗?使用 Fisheye 是否可以知道测量的 FOV?我找不到像 fisheye::calibrationMatrixValues 这样的东西。
cv::getOptimalNewCameraMatrix 可以完成这项工作。
我认为对于您的情况,最好的解决方案是使用 Open CV 3.4.X 中的 cv::fisheye 模块。(C++,微软视窗)。未失真的图像将比初始图像大得多,但它的大小有限。
在我的例子中,我使用 cv::fisheye::calibrate 来制作 K 和 D(相机矩阵和径向畸变系数矩阵)。然后我使用 cv::fisheye::initUndistortRectifyMap 为 X 和 Y 坐标生成地图。最后,我使用 cv::remap 通过来自 initUndistortRectifyMap 的地图来消除鱼眼相机的图像失真。