【问题标题】:opencv - Simple 2D <-> 2D transformopencv - 简单的 2D <-> 2D 变换
【发布时间】:2016-04-30 05:38:16
【问题描述】:

我想要做的是将线性轴系统(轴坐标)与照片的图像像素匹配。首先,我想使用相应的 2D 轴坐标(z=0 平面中的 3D 坐标)使用圆圈网格来校准相机。这样做一次,相机就稳定了。稍后我想在图像中找到轮廓并获取它们对应的轴坐标。在 Python 中我使用过:

ret, corners = cv2.findCirclesGrid(gray, (16,8))
imgpoints.append(corners)
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None)

在objpoints中我放了对应的坐标。例如

objp[:,:2] = np.mgrid[0:16,0:8].T.reshape(-1,2)
objpoints.append(objp)

代码或多或少来自本教程:http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_calib3d/py_calibration/py_calibration.html

我知道我可以使用 projectPoints 来获取图像像素中的轴坐标点。但我想做相反的事情并从图像像素中获取轴坐标。我在这里阅读了很多关于这个主题的stackoverflow,但我没有找到明确的答案。从我的理解是我必须不扭曲我的图片并使用solvePnP来获取相机坐标。我不得不承认我不明白如何解释这些步骤。我不确定哪个图像应该不失真(我的用于校准的圆形网格或我稍后处理的图像)以及如何将它与solvePnP结合起来。或者甚至可以在不扭曲完整图像的情况下只扭曲轮廓点?我也不知道如何从solvePnP的结果中获取图像像素的位置。此外,我需要通过至少 4 个点来解决即插即用,但我想要的是转换单点。也许我理解错了,我需要做一些完全不同的事情。 非常感谢您的帮助。

【问题讨论】:

    标签: python opencv


    【解决方案1】:

    好的,对不起,伙计们。问题解决了。我理解错了整个概念。我已经从校准程序中得到了相机姿势。我计算了一条到达 z=0 平面的射线,现在我得到了正确的 3D 点。在这样做之前,我还使用了 undistortpoints,它工作得很好。也许这也可以帮助有同样问题的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多