首页 > 解决方案 > OpenCV 将关键点转换为像素坐标

问题描述

我正在尝试从给定cv::KeyPoint. 这个类有一个名为pttype的变量,cv::Point2f它只是一个包含两个float的元组。

我不确定将其转换cv::Point2fcv::Point2i有效,因为我在文档中找不到这些浮点数代表什么。

我正在尝试在python中执行此操作,但我也找不到适用于 python 的正确OpenCV 3文档。

我的代码:

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 = ?

标签: pythonopencv3.0

解决方案


回答我自己的问题:

看起来cv::Point2f是亚像素坐标。只需将浮点数舍入到最近的整数就可以了。

有一个 OpenCV 函数已经执行此操作,称为 cv::cvRound

这实际上是 OpenCVcv::_drawKeypoint/modules/features2d/src/draw.cpp中的功能所做的


推荐阅读