OpenCV:关于 solvePnP 的困惑

OpenCV: Confusion about solvePnP

我对 OpenCV 中 solvePnP 函数的使用有点困惑。

我有相机内部参数的矩阵,我已经确定了图像中的一些关键点,我正在尝试估计校准的外部参数。

solvePnP 的文档说:

cv2.solvePnP(objectPoints, imagePoints, cameraMatrix, 
distCoeffs[, rvec[, tvec[, useExtrinsicGuess[, flags]]]]) → retval, rvec, tvec

我猜我的 imagePoints 参数是我检测到的关键点。这些艺术以像素为单位指定为 (x1, y1), (x2, y2), (x3, y3).

我对 objectPoints 完全困惑。所以,文档说:

objectPoints – Array of object points in the object coordinate space,
3xN/Nx3 1-channel or 1xN/Nx1 3-channel, where N is the number of points.
vector<Point3f> can be also passed here.

如何从我的图像点生成这些对象点?这里说的对象坐标space是什么意思?

cv2.solvePnP()方法一般用在姿态估计中,换句话说,它可以用来估计3D物体在2D图像中的方向。因此,为此您需要在对象的 3D 模型中标记一些关键点 (objectPoints),并在 2D 图像中检测这些关键点 (imagePoints)。

您可以参考此,了解此技术在人脸姿态估计中的应用。