我想使用 ArUco 查找标记的“空间坐标”。
我在理解tvecs
和rvecs
时遇到问题。我认为tvecs
是平移的,而rvecs
是旋转的。但是,它们是如何定向的,它们在代码中的编写顺序是什么,或者我如何定向它们?
Here is a little sketch of the setup.我在位置X,Y,Z处有一个摄像头(刚刚绘制的便携式网络摄像头来说明摄像头的方向),摄像头的方向可以用围绕X的角度a,围绕Y的角度b,围绕c的角度来描述Z(以Rad为单位的角度)。
因此,如果我的相机静止不动,我会拍下ChArUco板的不同图片,并为相机校准算法提供tvecs_camerapos
(Z,Y,X)和rvecs_camerapos
(c,b,a)。我得到了cameraMatrix,distCoeffs
和tvecs_cameracalib
,rvecs_cameracalib
。 t/rvecs_camerapos
和t/rvecs_cameracalib
不同,我觉得很奇怪。
camerapos
或cameracalib
进行姿势估计? 我认为
t/rvecs_cameracalib
可以忽略不计,因为我只对相机校准算法的内在参数感兴趣。现在我想找到标记的 X,Y,Z位置,我将
aruco.estimatePoseSingleMarkers
与t/rvecs_camerapos
一起使用并检索t/rvecs_markerpos
。 tvecs_markerpos
与我的期望值不匹配。t/rvecs_markerpos
进行转换才能找到标记的X,Y,Z? 最佳答案
处理摄像机和摄像机校准(包括AruCo)的OpenCV例程使用pinhole camera model。世界原点定义为相机模型的投影中心(所有进入相机的光线会聚),Z轴定义为相机模型的光轴,X和Y轴形成一个正交系统,其中Z。+ Z在相机的前面,+ X在右边,+ Y在下面。在此坐标系中定义了所有AruCo坐标。这就解释了为什么您的“摄像机”电视和rvecs会发生变化:它们不定义您的摄像机在某些世界坐标系中的位置,而是定义标记相对于您的摄像机的位置。
您真的不需要知道相机校准算法的工作原理,除了它会为您提供相机矩阵和一些镜头畸变参数,您可以将其用作其他AruCo和OpenCV例程的输入。
获得校准数据后,您可以使用AruCo识别标记并返回其在相机定义的3D坐标系中的位置和方向,并正确补偿相机镜头的变形。这样就足够了,例如,在相机的视频源上方使用OpenGL进行增强现实。
关于python - 在OpenCV-ArUco中对tvecs rvecs的基本了解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53277597/