opencv - 简单2D< - >二维变换

时间:2016-04-27 21:20:38

标签: python opencv

我想要做的是将线性轴系统(轴坐标)与照片的图像像素相匹配。首先,我想使用相应的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我推出了相应的坐标。 E.g。

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来获取图像像素中轴坐标的点。但我想做oposite并从图像像素获得轴坐标。我在这里读了很多关于这个主题的stackoverflow,但我没有找到一个明确的答案。从我想知道的是,我必须取消我的图片并使用solvePnP获取相机坐标。我不得不承认我不明白如何解释这些步骤。我不确定哪个图像应该是未失真的(我的圆网格用于校准或我后面的图像处理)以及如何将它与solvePnP结合起来。或者甚至可以在不失真的完整图像的情况下不失真轮廓的点?我也不知道如何从solvePnP的结果中获得作为图像像素的位置。另外我需要传递至少4点才能解决问题,但我想要的是转换单点。也许我理解错了,我需要做一些完全不同的事情。 非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

好的,对不起伙计们。问题解决了。我理解整个概念是错误的。我已经从校准程序中取出了相机姿势。我计算了射线击中z = 0平面,现在我得到了正确的3D点。在此之前,我还使用了undistortpoints,它完美无缺。也许这也可以帮助人们遇到同样的问题。