From ef436b2569703676bcc8117933f35861b29856e6 Mon Sep 17 00:00:00 2001 From: arrichter Date: Wed, 30 Sep 2020 15:38:29 +0200 Subject: [PATCH] Update py_matcher.rst --- .../py_feature2d/py_matcher/py_matcher.rst | 52 ++++++++++--------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/source/py_tutorials/py_feature2d/py_matcher/py_matcher.rst b/source/py_tutorials/py_feature2d/py_matcher/py_matcher.rst index b81130b..5b99297 100644 --- a/source/py_tutorials/py_feature2d/py_matcher/py_matcher.rst +++ b/source/py_tutorials/py_feature2d/py_matcher/py_matcher.rst @@ -151,46 +151,50 @@ Second dictionary is the SearchParams. It specifies the number of times the tree With these informations, we are good to go. :: - import numpy as np - import cv2 - from matplotlib import pyplot as plt + import cv2 as cv + import matplotlib.pyplot as plt - img1 = cv2.imread('box.png',0) # queryImage - img2 = cv2.imread('box_in_scene.png',0) # trainImage + img1 = cv.imread('L.png', 0) # queryImage + img2 = cv.imread('R.png', 0) # trainImage # Initiate SIFT detector - sift = cv2.SIFT() + sift = cv.SIFT_create() - # find the keypoints and descriptors with SIFT - kp1, des1 = sift.detectAndCompute(img1,None) - kp2, des2 = sift.detectAndCompute(img2,None) + # Find the keypoints and descriptors with SIFT + kp1, des1 = sift.detectAndCompute(img1, None) + kp2, des2 = sift.detectAndCompute(img2, None) # FLANN parameters - FLANN_INDEX_KDTREE = 0 - index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5) + FLANN_INDEX_KDTREE = 1 + index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5) search_params = dict(checks=50) # or pass empty dictionary - flann = cv2.FlannBasedMatcher(index_params,search_params) + # Create Flann object + flann = cv.FlannBasedMatcher(index_params, search_params) - matches = flann.knnMatch(des1,des2,k=2) + # Match descriptors + matches = flann.knnMatch(des1, des2, k=2) # Need to draw only good matches, so create a mask - matchesMask = [[0,0] for i in xrange(len(matches))] + matchesMask = [[0, 0] for i in range(len(matches))] - # ratio test as per Lowe's paper - for i,(m,n) in enumerate(matches): + # Ratio test as per Lowe's paper + for i, (m, n) in enumerate(matches): if m.distance < 0.7*n.distance: - matchesMask[i]=[1,0] + matchesMask[i] = [1, 0] - draw_params = dict(matchColor = (0,255,0), - singlePointColor = (255,0,0), - matchesMask = matchesMask, - flags = 0) - - img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,matches,None,**draw_params) + # Draw only the matches that fit our mask + draw_params = dict(matchColor=(0, 255, 0), + singlePointColor=(255, 0, 0), + matchesMask=matchesMask, + flags=cv.DrawMatchesFlags_DEFAULT) - plt.imshow(img3,),plt.show() + # Draw the good matches + img3 = cv.drawMatchesKnn(img1, kp1, img2, kp2, matches, None, **draw_params) + plt.imshow(img3) + plt.axis('off') + plt.show() See the result below: