使用sift算法对两张图片进行特征点匹配 并获得匹配值

在一些对图像分析的工作中。例如在一段连续视频数据中识别物品,当对识别到的物品进行记录时,由于图像画面的变换,可能造成识别物体的重复记录。

在此,我们假设采用opencv-python库中的sift算法,来对识别到的物体进行“跟踪”匹配,从而实现有效去重。

写在前面:

一.sift算法对环境库的要求:

  1. opencv-pythoy
  2. 当调用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)即得到了匹配点的数量
posted @ 2021-03-22 21:09  XAN不会coding  阅读(425)  评论(0编辑  收藏  举报