使用sift算法对两张图片进行特征点匹配 并获得匹配值
在一些对图像分析的工作中。例如在一段连续视频数据中识别物品,当对识别到的物品进行记录时,由于图像画面的变换,可能造成识别物体的重复记录。
在此,我们假设采用opencv-python库中的sift算法,来对识别到的物体进行“跟踪”匹配,从而实现有效去重。
写在前面:
一.sift算法对环境库的要求:
- opencv-pythoy
- 当调用sift报错时,通过命令pip install opencv-contrib-python往环境中安装opencv-contrib-pythoy
二.这里仅作一个函数,返回两图像对比后得到匹配点的数量。
import numpy as np import cv2 from matplotlib import pyplot as plt def siftmatch(img1,img2): sift = cv2.xfeatures2d.SIFT_create() kp1, des1 = sift.detectAndCompute(img1, None) # des是描述子 kp2, des2 = sift.detectAndCompute(img2, None) # cv2.BFMatcher()暴力匹配得到特征点 bf = cv2.BFMatcher() matches = bf.knnMatch(des1, des2, k=2) good = [] for m, n in matches: # m.distance的阈值由根据不同精度自己设立 if m.distance < 0.9 * n.distance: good.append([m]) return len(good)
return len(good)即得到了匹配点的数量