- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我尝试比较两个不同图像中的两个点,所以我想将坐标转换为关键点,以便稍后用它们计算描述和匹配结果。
我找到了方法:
keypoint = cv2.KeyPoint(x, y, 0)
vec = [keypoint]
它有效,但结果我每次都得到:
>>>akaze.compute(image, vec)
([], None)
即使我获取检测到的关键点,将它们转换为坐标并返回关键点(使用上面的结构),我也会得到相同的结果。
那么,如何将给定坐标转换为关键点(例如 KAZE 关键点)?非常感谢!
问候,狮子座
最佳答案
您创建的关键点大小为零 的主要问题。根据documentation , KeyPoint
构造函数签名需要 3 个参数:x 和 y 坐标以及大小(关键点直径)。您将此大小设置为零。
因此第一个变化是设置关键点直径,i。 e.我认为这应该有效:
keypoint = cv2.KeyPoint(x, y, 5)
但事实并非如此。原因是 OpenCV 关键点描述符计算机不接受具有默认 class_id (-1) 的关键点。真的,我不知道什么是实际的 class_id 目的(参见 discussion ),但我将其更改为零只是因为 akaze.detect(...)
方法返回此字段中关键点的数量(即第一个关键点为 0,第二个关键点为 1,依此类推)。出于同样的原因,我还将 size 值设置为 5 - 检测点中的这些值从大约 4.8 到 5.7
.
在这些修改之后一切都变得正常了,我。 e.这段代码:
keypoints = [cv2.KeyPoint(x, y, 5, _class_id=0)]
akaze = cv2.AKAZE_create("AKAZE")
akaze.compute(image, keypoints)
在我的案例中给出了正确的结果(OpenCV 3.0.0)。我想对于 2.4.x 版本也可以。
关于python - 如何使用 OpenCV 在 Python 中将给定坐标转换为 KAZE 关键点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34104297/
我尝试比较两个不同图像中的两个点,所以我想将坐标转换为关键点,以便稍后用它们计算描述和匹配结果。 我找到了方法: keypoint = cv2.KeyPoint(x, y, 0) vec = [k
我是一名优秀的程序员,十分优秀!