opencv - 如何使 calibrateCamera 仅返回 4 个 distCoeffs

标签 opencv computer-vision camera-calibration 3d-reconstruction

calibrateCamera 的定义是: CV_EXPORTS_W double calibrateCamera( InputArrayOfArrays objectPoints, InputArrayOfArrays 图像点, 大小 imageSize, 输入输出数组相机矩阵, InputOutputArray distCoeffs, OutputArrayOfArrays rvecs,OutputArrayOfArrays tvecs, int 标志 = 0, TermCriteria criteria = TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 30, DBL_EPSILON) );

一些这些参数:

@param distCoeffs 失真系数的输出向量 \f$(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6],[s_1, s_2, s_3, s_4]])\f$ 的 4、5、8 或 12 个元素。

@param flags 不同的标志,可以是零或以下值的组合: - CV_CALIB_RATIONAL_MODEL 系数 k4、k5 和 k6 已启用。为了提供向后兼容性,应明确指定此额外标志以使校准函数使用有理模型并返回 8 个系数。如果未设置该标志,则该函数仅计算并返回 5 个失真系数。

如我们所见,函数 calibrateCamera(...) 返回一个 5*1 distCoeffs Mat,但由于 k_3,它会失真太多,我真的不需要 k_3,好像 k_3 用于 Fisheye Lens,而 cvCalibrateCamera2(...) 只返回一个 4*1 distCoeffs Mat

那么我可以做些什么来处理 calibrateCamera?我搜索了很多但仍然没有想法。

1.jpg

1undistort.jpg

最佳答案

您可以设置标志 cv::CALIB_FIX_K3。这是在我的测试中计算的带有和不带有此标志的 disCoeffs。

{0.456533, 0.377582, 0.0250243, -0.0100882,  0}
{0.425909, 0.169672, 0.0236827, -0.00983692, 0.249512}

但是在我的测试中 undistort image 的结果没有任何区别。

关于opencv - 如何使 calibrateCamera 仅返回 4 个 distCoeffs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42338296/

相关文章:

c++ - 单值分解实现 C++

python - 如何使用 python 和 opencv 从彼此中减去两个图像?

python - 圆上的非极大值抑制

ksize=1 的 OpenCV Sobel 过滤器

opencv - 使用 opencv 了解相机捕获率

opencv - 3D物体检测-Opencv

image-processing - 在 opencv 中,如何将灰度图像复制并缩放为另一个彩色图像

opencv - 校准 DSLR 时对焦的问题

image-processing - 视频中的对象分类(人、动物、其他(汽车等))

opencv - 相机标定(OpenCV 2.3)——如何使用畸变参数?