cv2.aruco.detectMarkers在python中没有检测到标记

我的相机校准和失真矩阵,从aruco_calibration_fromimages.exe获得:

[[3.19439125e+03   0.00000000e+00   1.98509417e+03]  
  [0.00000000e+00   3.20213561e+03   1.55099552e+03]  
  [0.00000000e+00   0.00000000e+00   1.00000000e+00]]

 [[0.1395281  -0.38313647  0.00505558  0.00237535  0.33952515]]

图片,我试图检测:

enter image description here

aruco_simple.exe成功

enter image description here

但是python代码找不到任何东西:

fs = cv2.FileStorage("./calib_asus_chess/cam_calib_asus.yml", cv2.FILE_STORAGE_READ)
cam_mat=fs.getNode("camera_matrix").mat()
dist_mat=fs.getNode("distortion_coefficients").mat()
gray=cv2.imread('C:\\Users\\steve\\Dropbox\\Projects\\kinnekt\\laser\\aruco_frames\\shot1.jpg',0)
adict = cv2.aruco.Dictionary_get(cv2.aruco.DICT_ARUCO_ORIGINAL)
res = cv2.aruco.detectMarkers(gray,dictionary=adict,cameraMatrix=cam_mat,distCoeff=dist_mat)

由于某种原因,res [0]是空数组.为什么python版本失败?感谢名单!

您可能正在使用与您的图像不对应的字典.根据 documentation cv2.aruco.DICT_ARUCO_ORIGINAL是5×5:

DICT_ARUCO_ORIGINAL: standard ArUco Library Markers. 1024 markers, 5×5 bits, 0 minimum distance

您的图像有6×6图标而不是5×5,这就是为什么它不起作用.

您可以使用函数drawMarker()在图像中绘制字典的一些标记,然后打印它们并将它们用于测试.

例如,here您可以download DICT_4X4_50 icons.您可以打印它们并更改您的代码以使用DICT_4X4_50而不是DICT_ARUCO_ORIGINAL

相关文章
相关标签/搜索