在我的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)
关于如何修复它的想法?
答案 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。