我有一个平坦的四边形平面,我知道它的尺寸,我可以找到它的轮廓以及 4 个角。 我需要帮助来弄清楚确定其 3D 位置的方法。我已经设法得到它的 3x3 透视变换,看起来像这样:
[[ 3.91873630e-02 1.20990983e+00 -2.81213415e+02]
[ 1.21202027e+00 -1.85962357e-15 -3.52697898e+02]
[ 3.83991908e-04 2.52680041e-05 1.00000000e+00]]
(这是 OpenCV 3.1.0,在 python 中,该矩阵只是一帧,因此它可能无法代表所有潜在方向)
我能否根据这些信息确定相机的角度和距离,还是需要进行更多计算?
我不确定你们需要知道什么,所以如果你们需要,我很乐意为你们提供更多信息?
最佳答案
您可以使用 solvePnP 函数来确定四边形的位置和方向 wrt 相机。
你只需要拥有
- 世界框架中四边形角的三维坐标
- 对应的像素坐标
- 相机的内在参数
可以直接使用solvepnp() Opencv的函数。
在输出中,您可以在相机坐标系中获得世界坐标系的姿态。如果你把世界看成四边形本身,你就得到了相机坐标系中四边形的位姿信息(旋转和平移)
C++: bool solvePnP(InputArray objectPoints, InputArray imagePoints,
InputArray cameraMatrix, InputArray distCoeffs,
OutputArray rvec, OutputArray tvec,
bool useExtrinsicGuess=false, int flags=ITERATIVE );
使用 CV_P3P 参数作为标志,以防你恰好有 4 个点。
关于python - OpenCV 3.1.0 : Finding the 3D position of a flat plane with known dimensions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35051060/