使用OpenCV Python计算相机世界位置 [英] Calculate camera world position with OpenCV Python

查看:2463
本文介绍了使用OpenCV Python计算相机世界位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想计算我的相机在世界坐标中的位置。这应该是相当容易,但我没有得到我期望的结果。我相信我已经阅读关于这个主题的一切,但我的代码不工作。这是我做的:

I want to calculate my camera's position in world coordinates. This should be fairly easy, but I don't get the results I expect. I believe I've read everything on this topic, but my code isn't working. Here's what I do:

我有一个相机看着一个地区。

I have a camera looking at an area.

2)我使用 cv2.getPerspectiveTransform

3)H单应性将每个世界坐标转换为相机坐标;这是正常工作

3) The H homography transforms every world coordinate to camera coordinate; this is working properly

4)要计算相机矩阵我遵循

4) To calculate the camera matrix I followed 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)根据 ,相机的位置应按如下计算:

5) According to this, the camera's position should be calculated like this:

x,y,z = np.dot(-np.transpose(rotation),translation)

我得到的坐标完全错了。问题应该在步骤4或5的某个地方我猜。我的方法有什么问题?

The coordinates I'm getting are totally wrong. The problem should be somewhere in step 4 or 5 I guess. What's wrong with my method?

推荐答案

我想我现在已经有了。问题是在步骤4中描述的方法。不能从单应矩阵单独计算相机位置。相机内在矩阵也是必要的。因此,正确的程序如下:

I think I've got it now. The problem was with the method described in step 4. The camera position cannot be calculated from the homography matrix alone. The camera intrinsics matrix is also necessary. So, the correct procedure is the following:

1)绘制区域的地图

2)相机使用棋盘图像与 cv2.findChessboardCorners 这产生相机矩阵和失真系数

2) calibrate the camera using the chessboard image with cv2.findChessboardCorners this yields the camera matrix and the distortion coefficients

3)solvePnP与世界坐标(3D)和图像坐标(2D)。在给定4个对应点和摄像机矩阵的情况下,solvePnP返回对象在摄像机坐标系中的原点。

3) solvePnP with the world coordinates (3D) and image coordinates (2D). The solvePnP returns the object's origo in the camera's coordinate system given the 4 corresponding points and the camera matrix.

4)现在我需要计算摄像机在世界坐标中的位置。旋转矩阵是: rotM = cv2.Rodrigues(rvec)[0]

4) Now I need to calculate the camera's position in world coordinates. The rotation matrix is: rotM = cv2.Rodrigues(rvec)[0]

5)x,y ,相机的z位置为: cameraPosition = -np.matrix(rotM).T * np.matrix(tvec)

5) The x,y,z position of the camera is: cameraPosition = -np.matrix(rotM).T * np.matrix(tvec)

这篇关于使用OpenCV Python计算相机世界位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆