类型错误:按名称('k')和位置(2)给出的参数

5
以下是我的 opencv3 Python3 代码,用于匹配物体,但会出现以下错误:

TypeError: Argument given by name ('k') and 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个回答

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)

2
你能对这个错误做出更深入的解释吗?是什么导致了它? - Georg W.

2

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


1
尝试将 k 作为位置参数传递:
matches = flann.knnMatch(kpTrain,desTrain,2)

类型错误:只有长度为1的数组可以转换为Python标量。 - shar
@shar 请尝试使用 matches = flann.knnMatch(np.asarray(kpTrain,np.float32),np.asarray(desTrain,np.float32),2) - kvorobiev
@shar,你能在你的问题中提供完整的错误回溯吗?我尝试了这段代码,没有得到语法错误。 - kvorobiev
@shar 我在这个文件中没有找到 matches = flann.knnMatch(des1, des2, 2) 这一行。看起来它可能在另一个文件里。 - kvorobiev
@shar 请尝试重新输入此行代码 matches = flann.knnMatch(des1, des2, 2),不要使用复制/粘贴。 - kvorobiev
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接