【发布时间】:2013-01-04 20:23:36
【问题描述】:
我想计算我的相机在世界坐标中的位置。这应该相当容易,但我没有得到我期望的结果。我相信我已经阅读了有关此主题的所有内容,但我的代码无法正常工作。这是我的工作:
我有一个相机正在观察一个区域。
1) 我画了一张该地区的地图。
2) 我通过使用cv2.getPerspectiveTransform 将 4 个图像点与地图上的 4 个点进行匹配来计算单应性
3) H 单应性将每个世界坐标转换为相机坐标;这工作正常
4) 计算相机矩阵我跟着this:
translation = np.zeros((3,1))
translation[:,0] = homography[:,2]
rotation = np.zeros((3,3))
rotation[:,0] = homography[:,0]
rotation[:,1] = homography[:,1]
rotation[:,2] = np.cross(homography[0:3,0],homography[0:3,1])
cameraMatrix = np.zeros((3,4))
cameraMatrix[:,0:3] = rotation
cameraMatrix[:,3] = homography[:,2]
cameraMatrix = cameraMatrix/cameraMatrix[2][3] #normalize the matrix
5)根据this,相机的位置应该这样计算:
x,y,z = np.dot(-np.transpose(rotation),translation)
我得到的坐标完全错误。我猜问题应该出在第 4 步或第 5 步中。我的方法有什么问题?
【问题讨论】:
-
你知道这4个点的世界坐标吗?
-
是的,我知道世界坐标
-
如果你已经在使用opencv,你可以直接使用solvePnP吗?它会直接给你你的世界位置......
-
我刚刚尝试了solvePnP,它返回一个三元素旋转和一个三元素平移向量,但我不确定如何处理它们。
-
我建议就您的问题提出问题,solvePnP 比 getPerspectiveTransform 更适合查找您的世界位置
标签: python opencv computer-vision augmented-reality homography