zoukankan      html  css  js  c++  java
  • 机器学习进阶-案例实战-图像全景拼接-书籍SIFT特征点连接 1.cv2.drawMatches(对两个图像的关键点进行连线操作)

    1.cv2.drawMatches(imageA, kpsA, imageB, kpsB, matches[:10], None, flags=2)  # 对两个图像关键点进行连线操作

    参数说明:imageA和imageB表示图片,kpsA和kpsB表示关键点, matches表示进过cv2.BFMatcher获得的匹配的索引值,也有距离, flags表示有几个图像

    书籍的SIFT特征点连接:

       第一步:使用sift.detectAndComputer找出关键点和sift特征向量

       第二步:构建BFMatcher()蛮力匹配器,bf.match匹配sift特征向量,使用的是欧式距离

       第三步:根据匹配结果matches.distance对matches按照距离进行排序

       第四步:进行画图操作,使用cv2.drawMatches进行画图操作

    import cv2
    import numpy as np
    
    #读入图片
    imgA = cv2.imread('box.png', 0)
    imgB = cv2.imread('box_in_scene.png', 0)
    
    
    
    
    def cv_show(img, name):
        cv2.imshow(name, img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    
    # 第一步:构造sift,求解出特征点和sift特征向量
    sift = cv2.xfeatures2d.SIFT_create()
    kpsA, dpA = sift.detectAndCompute(imgA, None)
    kpsB, dpB = sift.detectAndCompute(imgB, None)
    
    # 第二步:构造BFMatcher()蛮力匹配,匹配sift特征向量距离最近对应组分
    bf = cv2.BFMatcher()
    # 获得匹配的结果
    matches = bf.match(dpA, dpB)
    
    #第三步:对匹配的结果按照距离进行排序操作
    matches = sorted(matches, key=lambda x: x.distance)
    
    # 第四步:使用cv2.drawMacthes进行画图操作
    ret = cv2.drawMatches(imgA, kpsA, imgB, kpsB, matches[:10], None, flags=2)
    
    cv2.imshow('ret', ret)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

  • 相关阅读:
    BZOJ 1040 (ZJOI 2008) 骑士
    BZOJ 1037 (ZJOI 2008) 生日聚会
    ZJOI 2006 物流运输 bzoj1003
    ZJOI 2006 物流运输 bzoj1003
    NOI2001 炮兵阵地 洛谷2704
    NOI2001 炮兵阵地 洛谷2704
    JLOI 2013 卡牌游戏 bzoj3191
    JLOI 2013 卡牌游戏 bzoj3191
    Noip 2012 day2t1 同余方程
    bzoj 1191 [HNOI2006]超级英雄Hero——二分图匹配
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/10422152.html
Copyright © 2011-2022 走看看