| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- from PIL import Image
- import numpy as np
- import numpy as np
- import cv2 as cv
- import matplotlib.pyplot as plt
- if __name__ == "__main__":
- from argparse import ArgumentParser
- parser = ArgumentParser()
- parser.add_argument("--im_A_path", default="assets/toronto_A.jpg", type=str)
- parser.add_argument("--im_B_path", default="assets/toronto_B.jpg", type=str)
- parser.add_argument("--save_path", default="demo/roma_warp_toronto.jpg", type=str)
- args, _ = parser.parse_known_args()
- im1_path = args.im_A_path
- im2_path = args.im_B_path
- save_path = args.save_path
- img1 = cv.imread(im1_path,cv.IMREAD_GRAYSCALE) # queryImage
- img2 = cv.imread(im2_path,cv.IMREAD_GRAYSCALE) # trainImage
- # Initiate SIFT detector
- sift = cv.SIFT_create()
- # find the keypoints and descriptors with SIFT
- kp1, des1 = sift.detectAndCompute(img1,None)
- kp2, des2 = sift.detectAndCompute(img2,None)
- # BFMatcher with default params
- bf = cv.BFMatcher()
- matches = bf.knnMatch(des1,des2,k=2)
- # Apply ratio test
- good = []
- for m,n in matches:
- if m.distance < 0.75*n.distance:
- good.append([m])
- # cv.drawMatchesKnn expects list of lists as matches.
- draw_params = dict(matchColor = (255,0,0), # draw matches in red color
- singlePointColor = None,
- flags = 2)
- img3 = cv.drawMatchesKnn(img1,kp1,img2,kp2,good,None,**draw_params)
- Image.fromarray(img3).save("demo/sift_matches.png")
|