使用图像上的点之间的已知距离及其透视图确定视野(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)的主要内容,如果未能解决你的问题,请参考以下文章