TypeError:由名称('k')和位置(2)给出的参数

时间:2015-07-31 06:09:20

标签: python opencv numpy

在我的opencv3 Python3 代码下面找到匹配引发以下错误的对象:

  

TypeError:由name('k')和position(2)

给出的参数

以下是代码:

import numpy as np
import cv2
import time
import distance
camera = cv2.VideoCapture(0)
sift = cv2.xfeatures2d.SIFT_create()
img = cv2.imread('/home/shar/bo.jpg')
imgTrainGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kpTrain = sift.detect(imgTrainGray,None)
kpTrain, desTrain = sift.compute(imgTrainGray, kpTrain)
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(kpTrain,desTrain,k=2)

关于如何修复它的想法?

3 个答案:

答案 0 :(得分:2)

这对我有用

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(np.asarray(des1,np.float32),np.asarray(des2,np.float32),k=2)

答案 1 :(得分:1)

尝试将k作为位置参数传递:

matches = flann.knnMatch(kpTrain,desTrain,2)

答案 2 :(得分:1)

您正在尝试匹配关键点和描述符 - 这是错误的。您需要两个图像,首先在两个图像(感兴趣的点)中找到关键点。然后为每个点计算一个描述符(同样在两个图像中)。最后,使用Flann查找两个图像之间的匹配。请参阅示例here