flags
参数用于指定相机标定的选项,它是一个整数,可以通过按位或运算来组合不同的标志位。以下是一些常用的标志位和它们的含义:
-
cv::CALIB_USE_INTRINSIC_GUESS
:- 如果提供了相机的初始猜测值(通过
cameraMatrix
和distCoeffs
参数),可以使用该标志位告诉标定函数使用这些初始猜测值进行标定。 - 用法示例:
flags |= cv::CALIB_USE_INTRINSIC_GUESS;
- 如果提供了相机的初始猜测值(通过
-
cv::CALIB_FIX_PRINCIPAL_POINT
:- 通过设置这个标志位,可以固定主点(光学中心)的位置,不对其进行优化。适用于已知主点位置的情况。
- 用法示例:
flags |= cv::CALIB_FIX_PRINCIPAL_POINT;
-
cv::CALIB_FIX_ASPECT_RATIO
:- 这个标志位用于固定像素宽高比,防止在标定过程中进行优化。适用于已知像素宽高比的情况。
- 用法示例:
flags |= cv::CALIB_FIX_ASPECT_RATIO;
-
cv::CALIB_ZERO_TANGENT_DIST
:- 将切向畸变系数设为零,即假设没有切向畸变。在某些情况下,如果切向畸变较小或可以忽略,可以使用这个标志位。
- 用法示例:
flags |= cv::CALIB_ZERO_TANGENT_DIST;
-
其他标志位:
- 还有其他一些标志位,如
cv::CALIB_FIX_FOCAL_LENGTH
(固定焦距)、cv::CALIB_FIX_K1
、cv::CALIB_FIX_K2
等,用于固定相机参数的特定部分。
- 还有其他一些标志位,如
使用时,可以根据实际标定需求选择相应的标志位,并通过按位或运算将它们组合在一起,例如:
flags = cv::CALIB_USE_INTRINSIC_GUESS | cv::CALIB_FIX_PRINCIPAL_POINT | cv::CALIB_ZERO_TANGENT_DIST;
这样,flags
就包含了上述三个标志位的组合。根据具体情况,可以根据需要添加或删除标志位。
criteria
参数用于指定相机标定的终止条件,即确定何时结束标定迭代过程。在这里,你使用了 cv::TermCriteria
类来定义终止条件。
cv::TermCriteria
构造函数的参数有三个:
-
type(第一个参数):表示终止条件的类型。在这里,使用了
cv::TermCriteria::COUNT + cv::TermCriteria::EPS
,表示当迭代次数或精度中的任一条件满足时,终止标定。这种设置同时考虑了迭代次数和精度两个方面。 -
maxCount(第二个参数):表示最大迭代次数。在这里设置为 30。即如果迭代次数达到了 30 次,标定将终止。
-
epsilon(第三个参数):表示精度。在这里使用
DBL_EPSILON
,它是双精度浮点数的机器精度。即当标定的精度达到了双精度浮点数的机器精度时,标定将终止。
综合而言,这样的设置表示,在迭代次数达到 30 或标定的精度满足机器精度时,标定算法将终止。这有助于控制标定过程的执行,避免过度迭代或在达到足够精度后浪费计算资源。