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?我搜索了很多但仍然没有想法。
最佳答案
您可以设置标志 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/