OpenCV求解PnP的函数有哪些,列出其参数意义,并对比不同方法的效果
时间: 2023-05-17 11:06:56 浏览: 68
C知道:OpenCV中求解PnP的函数有以下几个:
1. solvePnP():使用EPnP算法或Iterative算法求解PnP问题。
参数意义:
- objectPoints:3D物体坐标点集,每个点应该是一个Vec3f或Vec3d类型的向量。
- imagePoints:2D图像坐标点集,每个点应该是一个Vec2f或Vec2d类型的向量。
- cameraMatrix:相机内参矩阵,应该是一个3x3的浮点型矩阵。
- distCoeffs:相机畸变系数,应该是一个1x5或1x8的浮点型向量。
- rvec:输出的旋转向量,应该是一个3x1的浮点型向量。
- tvec:输出的平移向量,应该是一个3x1的浮点型向量。
- useExtrinsicGuess:是否使用外部估计值,默认为false。
- flags:算法标志位,默认为0。
2. solvePnPRansac():使用RANSAC算法求解PnP问题。
参数意义:
- objectPoints:同上。
- imagePoints:同上。
- cameraMatrix:同上。
- distCoeffs:同上。
- rvec:同上。
- tvec:同上。
- useExtrinsicGuess:同上。
- iterationsCount:迭代次数,默认为100。
- reprojectionError:重投影误差阈值,默认为8.0。
- confidence:置信度,默认为0.99。
- inliers:输出的内点集合,应该是一个1xN的整型向量。
- flags:算法标志位,默认为0。
3. solvePnPRefineLM():使用Levenberg-Marquardt算法对solvePnP()的结果进行优化。
参数意义:
- objectPoints:同上。
- imagePoints:同上。
- cameraMatrix:同上。
- distCoeffs:同上。
- rvec:输入的旋转向量,应该是一个3x1的浮点型向量。
- tvec:输入的平移向量,应该是一个3x1的浮点型向量。
- useExtrinsicGuess:同上。
- criteria:优化算法的终止准则,默认为TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, DBL_EPSILON)。
不同方法的效果:
- solvePnP():速度较快,但精度较低。
- solvePnPRansac():速度较慢,但精度较高,适用于存在噪声或离群点的情况。
- solvePnPRefineLM():对solvePnP()的结果进行优化,可以提高精度。