tensorflow:
https://github.com/rpautrat/SuperPoint
import cv2
import numpy as np
#opencv-python==3.4.2.17
#opencv-contrib-python==3.4.2.17
class LocalImageDescriptor(object):
def __init__(self,):
octaves = 3
self.sift_pt = cv2.xfeatures2d.SIFT_create(nOctaveLayers=octaves)
octaves = 4
self.surf_pt = cv2.xfeatures2d.SURF_create(nOctaves=octaves)
octaves = 3
self.orb_pt = cv2.ORB_create(nlevels=octaves)
octaves = 3
self.brisk_pt = cv2.BRISK_create(octaves=octaves)
self.kaze_pt = cv2.KAZE_create()
self.akaze_pt = cv2.AKAZE_create()
self.mser_pt = cv2.MSER_create()
def get_keypoints(self, image):
sift_keypoints = self.sift_pt.detect(image)
surf_keypoints = self.surf_pt.detect(image)
orb_keypoints = self.orb_pt.detect(image)
brisk_keypoints = self.brisk_pt.detect(image)
kaze_keypoints = self.kaze_pt.detect(image)
akaze_keypoints = self.akaze_pt.detect(image)
mser_keypoints = self.mser_pt.detect(image)
keypoints = []
for kp in sift_keypoints:
keypoints.append([kp.pt[0], kp.pt[1]])
for kp in surf_keypoints:
keypoints.append([kp.pt[0], kp.pt[1]])
for kp in orb_keypoints:
keypoints.append([kp.pt[0], kp.pt[1]])
for kp in brisk_keypoints:
keypoints.append([kp.pt[0], kp.pt[1]])
for kp in kaze_keypoints:
keypoints.append([kp.pt[0], kp.pt[1]])
for kp in akaze_keypoints:
keypoints.append([kp.pt[0], kp.pt[1]])
for kp in mser_keypoints:
keypoints.append([kp.pt[0], kp.pt[1]])
np_keypoints = np.array(keypoints)
np_keypoints = np.around(np_keypoints, 5)
np_keypoints = np.unique(np_keypoints, axis=0)
return np_keypoints
lid = LocalImageDescriptor()
image = cv2.imread("/home/ninghua/图片/2021-08-16 17-54-06 的屏幕截图.png")
keypoints = lid.get_keypoints(image)
vis = image.copy()
for i in range(len(keypoints)):
cv2.circle(vis, (int(keypoints[i, 0]), int(keypoints[i, 1])), 1, (0, 255, 255), 2)
cv2.imwrite("result.png", vis)