OpenCV преобразует ключевые точки в координаты пикселей - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь извлечь координаты пикселей из заданного cv::KeyPoint. Этот класс имеет переменную с именем pt типа cv::Point2f, которая является просто кортежем, содержащим два числа с плавающей запятой .

Я не уверен, что приведение cv::Point2f к cv::Point2i работает, так как я не могу найти в документах, что представляют эти числа с плавающей точкой.

Я пытаюсь сделать это в python , но я не могу найти подходящую документацию OpenCV 3 для python.

Мой код:

import cv2

feature_detector = cv2.xfeatures2d.SURF_create()
key_points = feature_detector.detect(img, None)

# this is a list of float tuples e.g. (100.3224, 451.2334)
float_coordinates = list(map(lambda key_point: key_point.pt))  

# pixel_coordinates = ?

1 Ответ

0 голосов
/ 10 мая 2018

Отвечая на мой вопрос:

Похоже, cv::Point2f - это субпиксельные координаты. Простое округление с плавающей точкой до ближайших целых должно работать очень хорошо.

Существует функция OpenCV, которая уже делает это, и называется cv :: cvRound .

Это фактически то, что OpenCV выполняет в своей функции cv::_drawKeypoint в / modules / features2d / src / draw.cpp

...