【问题标题】:OpenCV and Python: Problems with knnMatch argumentsOpenCV 和 Python:knnMatch 参数的问题
【发布时间】:2014-06-18 19:35:18
【问题描述】:

我正在尝试遵循 opencv 教程 here。不幸的是,它在 flann.knnMatch(des1,des2,k=2) 处失败。这是我的代码:

import cv2
import time
import numpy as np

im1 = cv2.imread('61_a.tif')
im2 = cv2.imread('61_b.tif')

surf = cv2.SURF(500,3,4,1,0) 
print "Detect and Compute"
kp1 = surf.detect(im1,None)
kp2 = surf.detect(im2,None)

des1 = surf.compute(im1,kp1)
des2 = surf.compute(im2,kp2)

MIN_MATCH_COUNT = 5
FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks = 50)

flann = cv2.FlannBasedMatcher(index_params,search_params)
matches = flann.knnMatch(des1,des2,k=2)

我得到错误:

matches = matcher.knnMatch(des1,des2,k=2)
TypeError: Argument given by name ('k') and position (2)

我已尝试更改匹配以镜像fix in this question,如下所示:

flann = cv2.flann_Index(des2, index_params)
matches = flann.knnMatch(des1,2,params={})

然后我得到这个错误:

flann = cv2.flann_Index(des2, index_params)
TypeError: features is not a numerical tuple

我真的不确定我做错了什么。有人可以指出我正确的方向吗?

如果您碰巧知道用于全景/拼接的 SURF 或 ORB 的工作 PYTHON 示例,这相当简单,我也将不胜感激。我已经用谷歌搜索了很多,但只找到了一些关于如何完成的操作(或者它是用 C 编写的),或者只找到了未完成/损坏的示例。

谢谢!

【问题讨论】:

    标签: python opencv image-processing


    【解决方案1】:

    surf.compute() 返回关键点和描述符列表。 flann.knnMatch() 感到困惑,因为des1 是一对列表,而不是k=1,它找到了另一对列表(即des2)。检查des1和des2的shape()

    要么将des1[1]des2[1] 传递给flann.knnMatch(),要么使用surf.detectAndCompute() 代替surf.detect()surf.compute()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 2012-12-23
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多