python - OpenCV 3.1.0 : Finding the 3D position of a flat plane with known dimensions

标签 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 中,该矩阵只是一帧,因此它可能无法代表所有潜在方向)

我能否根据这些信息确定相机的角度和距离,还是需要进行更多计算?

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

最佳答案

您可以使用 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/

相关文章:

python - 没有基本名称的文件的路径

image-processing - 通过直方图评估改善肤色检测

java - 数组值未按预期工作

math - 如何使用three.js绘制自定义3d表面?

python - 我怎样才能使用 pytest 选项作为固定装置而不是重复自己?

python - 从 ipywidgets.widgets.SelectMultiple 获取值

python - 补丁中的 matplotlib 颜色渐变?

java - 如何获取 Mat 图像的像素区域

python - 我在Open CV中使用TF对象检测API

java - 根据鼠标位置添加力