python - OpenCV 将关键点转换为像素坐标
问题描述
我正在尝试从给定的cv::KeyPoint
. 这个类有一个名为pt
type的变量,cv::Point2f
它只是一个包含两个float的元组。
我不确定将其转换cv::Point2f
为cv::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 = ?
解决方案
回答我自己的问题:
看起来cv::Point2f
是亚像素坐标。只需将浮点数舍入到最近的整数就可以了。
有一个 OpenCV 函数已经执行此操作,称为 cv::cvRound。
这实际上是 OpenCVcv::_drawKeypoint
在/modules/features2d/src/draw.cpp中的功能所做的
推荐阅读
- android - React native android apk安装错误
- hadoop - Ranger 未安装在 Kerberos Hadoop 集群中
- core - 如何设置位置和大小图像变量 Stimulsoft Core
- python - 将按钮添加到 ListView 项的右侧
- reactjs - 如何使 react-native-tab-view 的 TabBar 变小?
- android - 标签显示错误的标题
- java - Spring 状态机操作如何工作
- angular - 为什么使用 Angular CLI 构建的 Angular 应用程序会在 github 上发出安全警告,我该如何解决?
- regex - Reg.ex 模式匹配在 postgresql 中不起作用
- java - 可以使用接口的默认方法来描述行为吗?