Использование board_create для маркеров aruco приводит к ошибке из-за неправильного типа objPoints - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь сделать так, чтобы плата 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.

...