Sto cercando di confrontare una singola immagine vs un database di immagini.
Attualmente sto usando Python 2.7 e OpenCV 3.3.0.
Dopo un po 'googling, vengo con questo codice:
scanned = 'tests/temp_bw.png'
surf = cv2.xfeatures2d.SURF_create(400)
surf.setUpright(True)
img1 = cv2.imread(scanned, 0)
kp1, des1 = surf.detectAndCompute(img1, None)
FLANN_INDEX_KDTREE = 1
index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
search_params = dict(checks=50)
flann = cv2.FlannBasedMatcher(index_params, search_params)
for filename in os.listdir('images'):
img2 = cv2.imread('images/' + filename, 0)
kp2, des2 = surf.detectAndCompute(img2, None)
flann.add([des2])
print str(len(flann.getTrainDescriptors()))
print Training...
flann.train()
print Matching...
indexes, matches = flann.knnSearch(des1, 2, params={})
Il problema principale è che in OpenCV 3.3.0 del FlannBasedMatcher
non ha un metodo knnSearch
. Ho controllato la documentazione del codice e nella 2.4 tale metodo era lì, ora è stato rimosso.
C'è qualcosa di simile in OpenCV 3.3.0?
O devo usare un approccio diverso?