美文网首页
2018-02-03:使用SIFT

2018-02-03:使用SIFT

作者: BL_Fang | 来源:发表于2018-02-03 21:56 被阅读456次

    1.下载opencv,如果使用3.0及以上版本,一定要使用opencv-contrib-python,因为在opencv-python中移除了SIFT,SURF等算法。移除的理由是这些算法受专利保护。最简单的方法为在命令行中运行

    pip install opencv-contrib-python
    

    2.使用SIFT进行特征点提取的事例如下:

    #coding=utf-8
    #注意如果脚本中要使用中文,则需要指明编码格式
    import cv2
    import sys
    
    #imgpath为图像路径
    imgpath = sys.argv[1]
    
    # 将图像读取进来, 基本可以支持任意标准格式的文件
    # imread(filename, [flags]), flags表示图像的色彩,可选
    img = cv2.imread(imgpath)
    
    # 将图像转化为灰度图像
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    # 构造一个sift对象
    sift = cv2.xfeatures2d.SIFT_create()
    
    # 检测关键点和对应的描述子
    #cv2.SIFT.detectAndCompute(image, mask[, descriptors[, useProvidedKeypoints]])
    # 如果需要在图像中的某一个区域识别,则设置mask
    keypoints, descripter = sift.detectAndCompute(gray,None)
    flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS
    color = (51, 163, 236)
    # 绘制关键点
    # cv2.drawKeypoints(image, keypoints[, outImage[, color[, flags]]])
    img = cv2.drawKeypoints(gray, keypoints, color, flags)
    cv2.imshow('sift_ketpoints', img)
    while (True):
        if cv2.waitKey(1000 / 12) & 0xff == ord('q'):
            #按q时退出
            break
    cv2.destroyAllWindows()
    
    1. 运行该脚本。假如在该脚本的同一目录下有名为img.jpeg的图,则:
     python main.py img.jpeg
    

    得到的结果为


    原始图像 结果图

    相关文章

      网友评论

          本文标题:2018-02-03:使用SIFT

          本文链接:https://www.haomeiwen.com/subject/joqpzxtx.html