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()

  • 相关阅读:
    迭代器、生成器
    函数(函数基础、装饰器、递归、匿名函数)
    文件处理
    python对象、引用
    字符编码
    流程控制if、while、for
    编程与编程语言
    Java源码阅读(五)—— AbstractQueuedSynchronizer
    Java并发编程(二) —— volatile
    Java源码阅读(七)—— ReentrantReadWriteLock
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/10422152.html
Copyright © 2011-2022 走看看