使用 Aruco Markers 获取相机位置和旋转

Posted

技术标签:

【中文标题】使用 Aruco Markers 获取相机位置和旋转【英文标题】:Get Camera Position and Rotation using Aruco Markers 【发布时间】:2019-08-20 16:29:50 【问题描述】:

我使用函数cv.aruco.estimatePoseSingleMarkers() 得到rvectvec。 使用这两个向量如何获得相对于 Aruco Marker 的相机位姿?

while (True):
    ret, frame = cap.read()

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    aruco_dict = aruco.Dictionary_get(aruco.DICT_ARUCO_ORIGINAL)
    parameters = aruco.DetectorParameters_create()

    corners, ids, rejectedImgPoints = aruco.detectMarkers(gray, aruco_dict, parameters=parameters)

    font = cv2.FONT_HERSHEY_SIMPLEX 

    if np.all(ids != None):
        # POSE ESTIMATION
        rvec, tvec,_ = aruco.estimatePoseSingleMarkers(corners[0], 0.1, mtx, dist) 

【问题讨论】:

【参考方案1】:

rvec 是标记相对于相机框架的旋转。您可以使用内置的Rodrigues function 将rvec 转换为旋转矩阵。然后得到这个矩阵的逆(这是一个旋转矩阵,所以逆是矩阵的转置)。这是相机相对于标记的旋转。

tvec 的大小不受旋转影响。如果需要考虑相机相对于marker的方向,取tvec的负数即可。

【讨论】:

以上是关于使用 Aruco Markers 获取相机位置和旋转的主要内容,如果未能解决你的问题,请参考以下文章

翻译OpenCV文档:ArUco Marker的检测 (Detection of ArUco Markers)

基准标记或相机姿态估计

week63 PnP位姿估计 基于ArUco Marker来估算camera的位姿

如何链接两个 ArUco 标记的姿势?

使用 aruco 和 opencv4 的未解析符号

如何在颤振中从谷歌地图获取位置的经纬度坐标?