Sim*_*mon 2 python opencv aruco
如何使用 OpenCV 中的 ArUco 框架来获取相机到 ArUco 标记的距离?
需要执行几个步骤才能确定相机到 ArUco 标记的距离。
这一步是最重要的。如果跳过这一步骤,进一步描述的步骤中的所有结果都将不准确。
您将使用的相机需要进行校准。重要的是,在此步骤中使用相机的方式与使用相机进行标记检测的方式相同。所以相同的分辨率、焦距(相同的镜头)。
那里有很多好的指南,所以我将跳过此任务以专注于主要问题。可能的指南: https://docs.opencv.org/master/da/d13/tutorial_aruco_calibration.html https://mecaruco2.readthedocs.io/en/latest/notebooks_rst/Aruco/Projet+calibration-Paul.html
此步骤需要参数来校正上一步中的失真。我将在进一步的示例中调用cameraMatrixmtx
和distCoeffs 。dist
我不会解释简单的标记检测需要什么,因为那里有很多好的指南。
dictionary = cv.aruco.Dictionary_get(cv.aruco.DICT_4X4_50)
parameters = cv.aruco.DetectorParameters_create()
Run Code Online (Sandbox Code Playgroud)
frame
将是包含标记的框架
(corners, ids, rejected) = cv.aruco.detectMarkers(frame, dictionary, parameters=parameters)
Run Code Online (Sandbox Code Playgroud)
您将需要要查找的标记的大小。所以它的实际尺寸打印在纸上。测量它,因为我们将需要它。您使用什么测量单位并不重要。但请注意,我们收到的距离结果将是相同的单位。我在这个例子中使用了 CM
markerSizeInCM = 15.9
rvec , tvec, _ = aruco.estimatePoseSingleMarkers(corners, markerSizeInCM, mtx, dist)
Run Code Online (Sandbox Code Playgroud)
现在我们有了标记rvec
相对于相机的旋转向量 ( ) 和平移向量 ( tvec
)。参见来源:OpenCV
平移向量与我们在步骤 3 中提供的真实标记大小的单位相同。它的格式[x,y,z]
是标记在 3D 空间中的位置。
我们现在只需要从我们在步骤 3 中提供的同一测量单位中读出z
从tvec
相机到标记中心的距离。
归档时间: |
|
查看次数: |
6829 次 |
最近记录: |