OpenCV 3.1.0:查找具有已知尺寸

时间:2016-01-28 00:56:51

标签: python opencv math 3d

我有一个扁平的四边形平面,我知道它的尺寸,我可以找到它的轮廓,以及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中,那个矩阵只是一个帧,因此它可能无法代表所有潜在的方向)

我可以从此信息中确定远离相机的角度和相机的距离,还是需要执行更多计算?

我不确定你们需要知道什么,所以如果你需要,我会很乐意为你提供更多信息吗?

1 个答案:

答案 0 :(得分:1)

您可以使用solvePnP函数来确定相机的四边形位置和方向。

你需要的只是

  • 世界框架中四边形角落的3D坐标
  • 对应的像素坐标
  • 相机的内在参数

您可以直接使用Opencv的solvepnp()功能。

在输出中,您可以在相机坐标系中获得世界坐标系的姿势。如果你将世界视为四边形,你可以在相机坐标系中获得四边形的姿势信息(旋转和平移)

C++: bool solvePnP(InputArray objectPoints, InputArray imagePoints, 
                   InputArray cameraMatrix, InputArray distCoeffs, 
                   OutputArray rvec, OutputArray tvec, 
                   bool useExtrinsicGuess=false, int flags=ITERATIVE );

对于标志使用CV_P3P参数,以防您恰好有4个点。