image-matching-webui / third_party /RoMa /demo /demo_match_opencv_sift.py
Realcat
update: roma
9cde3b4
raw
history blame contribute delete
No virus
1.5 kB
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")