• 特征相似性


       万事找到入门很重要,图像识别也不例外,不过这个例子的drawMatchesKnn就像是封装好的一样,Python语言和C#等其它语言是一样的。

    import cv2
    from matplotlib import pyplot as plt
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    
    """
    FLANN是类似最近邻的快速匹配库
        它会根据数据本身选择最合适的算法来处理数据
        比其他搜索算法快10倍
    """
    # 按照灰度图片读入
    img1 = cv2.imread("biaoge.jpg",cv2.IMREAD_GRAYSCALE)#导入灰度图像
    img2 = cv2.imread("yinzhang.jpg",cv2.IMREAD_GRAYSCALE)
    # 创建sift检测器
    sift = cv2.SIFT_create()#.xfeatures2d
    # 查找监测点和匹配符
    kp1, des1 = sift.detectAndCompute(img1, None)
    kp2, des2 = sift.detectAndCompute(img2, None)
    """
    keypoint是检测到的特征点的列表
    descriptor是检测到特征的局部图像的列表
    """
    # 获取flann匹配器
    FLANN_INDEX_KDTREE = 0
    # 参数1:indexParams
    #    对于SIFT和SURF,可以传入参数index_params=dict(algorithm=FLANN_INDEX_KDTREE, trees=5)。
    #    对于ORB,可以传入参数index_params=dict(algorithm=FLANN_INDEX_LSH, table_number=6, key_size=12)。
    indexParams = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
    # 参数2:searchParams 指定递归遍历的次数,值越高结果越准确,但是消耗的时间也越多。
    searchParams = dict(checks=50)
    
    
    # 使用FlannBasedMatcher 寻找最近邻近似匹配
    flann = cv2.FlannBasedMatcher(indexParams, searchParams)
    # 使用knnMatch匹配处理,并返回匹配matches
    matches = flann.knnMatch(des1, des2, k=2)
    # 通过掩码方式计算有用的点
    matchesMask = [[0, 0] for i in range(len(matches))]
    
    # 通过描述符的距离进行选择需要的点
    for i, (m, n) in enumerate(matches):
        if m.distance < 0.4*n.distance: # 通过0.7系数来决定匹配的有效关键点数量
            matchesMask[i] = [1, 0]
    
    drawPrams = dict(matchColor=(0, 255, 0),
                     singlePointColor=(255, 0, 0),
                     matchesMask=matchesMask,
                     flags=0)
    # 匹配结果图片
    img33 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, matches, None, **drawPrams)
    
    
    plt.figure(figsize=(10,10))
    plt.title('FLANN法',fontsize=12,color='r')
    plt.imshow(img33)
    plt.axis('off')
    plt.show()
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    View Code
  • 相关阅读:
    缩水版遗传算法 学习笔记
    算法导论 二项堆
    Linux系统编程(6)——文件系统
    Linux系统编程(5)——文件与IO之mmap函数
    Linux系统编程(4)——文件与IO之ioctl函数
    Linux系统编程(3)——文件与IO之fcntl函数
    Linux系统编程(2)——文件与IO之系统调用与文件IO操作
    Linux系统编程(1)——文件与I/O之C标准I/O函数与系统调用I/O
    C语言的本质(38)——makefile之变量
    C语言的本质(37)——makefile之隐含规则和模式规则
  • 原文地址:https://www.cnblogs.com/shiningleo007/p/15898533.html
Copyright © 2020-2023  润新知