Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 阿鲁科标记世界坐标_Python_Opencv_Image Processing_Computer Vision_Aruco - Fatal编程技术网

Python 阿鲁科标记世界坐标

Python 阿鲁科标记世界坐标,python,opencv,image-processing,computer-vision,aruco,Python,Opencv,Image Processing,Computer Vision,Aruco,我一直在使用Python的OpenCV库,使用ArUco进行对象跟踪 目标是获得阿鲁科标记中心的x/y/z坐标,以及相对于校准相机的角度 我可以用到目前为止的代码在aruco标记上显示轴,但找不到如何从旋转和平移向量中获得x/y/z坐标(如果这是正确的方法) 这是定义旋转/平移向量的代码行: rvec, tvec, _ = aruco.estimatePoseSingleMarkers(corners, markerLength, camera_matrix, dist_coeffs) # Fo

我一直在使用Python的OpenCV库,使用ArUco进行对象跟踪

目标是获得阿鲁科标记中心的x/y/z坐标,以及相对于校准相机的角度

我可以用到目前为止的代码在aruco标记上显示轴,但找不到如何从旋转和平移向量中获得x/y/z坐标(如果这是正确的方法)

这是定义旋转/平移向量的代码行:

rvec, tvec, _ = aruco.estimatePoseSingleMarkers(corners, markerLength, camera_matrix, dist_coeffs) # For a single marker
有没有关于如何在相机世界中获得角度/标记位置的想法


谢谢

经过一些磨难,我发现阿鲁科的x和y坐标可以通过角点的平均值来确定:

x = (corners[i-1][0][0][0] + corners[i-1][0][1][0] + corners[i-1][0][2][0] + corners[i-1][0][3][0]) / 4
y = (corners[i-1][0][0][1] + corners[i-1][0][1][1] + corners[i-1][0][2][1] + corners[i-1][0][3][1]) / 4
而相对于摄像机的角度可以由旋转矢量的罗德里格斯方程来确定,矩阵必须先填充

rotM = np.zeros(shape=(3,3))
cv2.Rodrigues(rvec[i-1], rotM, jacobian = 0)
最后,对旋转矩阵进行RQ分解,得到偏航俯仰和横摇

ypr = cv2.RQDecomp3x3(rotM)

正如chungzuwalla所说,tvec代表摄像机坐标系中标记中心的位置,它不随标记在某个位置的旋转而改变。若你们想知道角点在相机坐标系中的位置,那个么你们需要同时使用rvec和tvec

这是一个完美的解释


tvec本身是摄像机坐标系中标记的x/y/z坐标,rvec是标记相对于摄像机的旋转(可以使用Rodrigues()将其转换为3x3旋转矩阵)。这与您期望的结果不同吗?你说你画的轴与拍摄的图像正确对齐,对吗?