使用图像上的点之间的已知距离及其透视图确定视野(OpenCV python)

Posted

技术标签:

【中文标题】使用图像上的点之间的已知距离及其透视图确定视野(OpenCV python)【英文标题】:Determine Field Of View using known distance between points on image and its perspective (OpenCV python) 【发布时间】:2021-02-12 02:29:45 【问题描述】:

得到一个已知大小的棋盘图像(青色线长 2 厘米)

确定 FOV 的简单方法如下:

    catX = x1 - x0
    catY = y1 - y0
    hypoPx = sqrt(catX ** 2 + catY ** 2)
    pxRatio = hypoPx / 200  # pixels/mm

    pxHeight, pxWidth = img.shape[:2]
    width, height = width / pxRatio, height / pxRatio

但它没有考虑透视失真。 所以我使用solvePnPRansac 得到了它的旋转和变换向量(图像上的轴正确地说明了它的方向)。

我想应该有足够的数据几乎可以精确地确定以 mm 为单位的视野,但无法进一步移动,我不太擅长矩阵之类的东西......有什么提示吗?

【问题讨论】:

【参考方案1】:

fov 是 atan(对象大小/到对象的距离)。您将有 2 个 fov:fov_x 和 fov_y。校准对象必须与传感器平面平行。

【讨论】:

到物体的距离未知。我只知道某些点之间的距离(以像素和毫米为单位),以及(我想)平面在 3d 中的方向。 您的意思是因为棋盘与传感器平面不平行,我还是无法正确处理?嗯...轴似乎正确地代表了实际方向... 您可以先使用多张图像校准相机,然后您就可以获取相机参数。 docs.opencv.org/master/dc/dbb/tutorial_py_calibration.html 也检查这个:***.com/questions/39992968/… 我看过这些,他们没有回答问题。任务是使用照片上已知大小的对象测量随机照片上的 FOV。没有几个图像可以校准相机。我不控制制作图像的条件。在我看来,方向的确定是正确的,所以问题是 - 是否可以使用可用数据来测量 FOV。

以上是关于使用图像上的点之间的已知距离及其透视图确定视野(OpenCV python)的主要内容,如果未能解决你的问题,请参考以下文章

向数学达人求助,如何求到平面上五个任意的点距离最近的点的位置?已知那五个点的位置

确定行进路径 mkmapview swift 上的距离

计算两个坐标之间距离的点

如何找到距离等于 X 的两个向量的点

[ CS231n ] 图像分类

face_recognition 库如何在后台工作?