Как правильно использовать функцию cv2.DrawMarker? - PullRequest
1 голос
/ 10 мая 2019

Я получаю сообщение об ошибке, показанное ниже, при попытке вызвать функцию cv2.drawMarker.

...
line_type=cv2.LINE_AA)
TypeError: integer argument expected, got float.

Process finished with exit code 1

Это мой вызов функции

    for keypoint in keypoints:
        im_with_keypoints = cv2.drawMarker(im_with_keypoints,
                                           keypoint.pt,
                                           (0, 0, 255),
                                           markerType=cv2.MARKER_CROSS,
                                           markerSize=30,
                                           thickness=2,
                                           line_type=cv2.LINE_AA)

Это документация для функции с официального сайта OpenCV.

void cv::drawMarker ( Mat &             img,
                      Point             position,
                      const Scalar &    color,
                      int               markerType = MARKER_CROSS,
                      int               markerSize = 20,
                      int               thickness = 1,
                      int               line_type = 8 
)   

Я пытался перейти с

line_type  = cv2.LINE_AA

до

line_type = int(0)

чтобы попытаться форсировать тип аргумента, но я все еще получаю ту же ошибку.

Я пытался найти другие примеры кода, но cv2.LINE_AA должен работать. Я все еще получаю ту же ошибку с моим приводом int (..), поэтому я не уверен, куда идти ...

Любая помощь будет оценена. Спасибо!

1 Ответ

0 голосов
/ 12 мая 2019

Логической причиной вашей ошибки может быть только то, что ваши keypoints имеют значение float, а не integer dtype, поскольку вы правильно передали ожидаемые типы для всех других параметров.Вы можете преобразовать dtype, используя astype:

keypoints = keypoints.astype(np.int32)

. Хороший совет при отладке этих ошибок - посмотреть на предыдущие строки или другие параметры, если строка с сообщенной ошибкой выглядит нормально.

...