Я пытаюсь сделать так, чтобы плата aruco обнаружила ее на изображении.
Я сделал фрагмент, чтобы воспроизвести ту же проблему при создании GridBoard, а затем пытался использовать create_Board для обнаруженных углов и идентификаторов для созданного изображения.
# Settings for the marker
max_amount_of_markers_w = 10
max_amount_of_markers_h = 6
ar = aruco.DICT_6X6_1000
aruco_dict = aruco.Dictionary_get(ar)
# creat an aruco Board
grid_board = cv2.aruco.GridBoard_create(max_amount_of_markers_w,
max_amount_of_markers_h,
0.05,
0.01,
aruco_dict)
# convert to image
img = grid_board.draw((1920,180))
# detected corners and ids
corners,ids,rejected = aruco.detectMarkers(img,
aruco_dict)
# convert to X,Y,Z
new_corners = np.zeros(shape=(len(corners),4,3))
for cnt,corner in enumerate(corners):
new_corners[cnt,:,:-1] = corner
# try to create a board via Board_create
aruco.Board_create(new_corners,aruco_dict,ids)
Ошибка происходит из последней строки, ошибка следующая:
Ошибка: OpenCV (4.1.1) C: \ projects \ opencv-python \ opencv_contrib \ modules \ aruco \ src \ aruco. cpp: 1458: ошибка: (-215: подтверждение не выполнено) objPoints.type () == CV_32FC3 || objPoints.type () == CV_32FC1 в функции 'cv :: aruco :: Board :: create'
Это означает, что ему нужно что-то с 3 каналами (для x, y и z), что задается как массив numpy.