python3 SIFT算法的实现

python3 SIFT算法的简单实现

  1. SIFT算法

    SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种描述。SIFT在数字图像的特征描述方面是非常给力的一种,许多人也对SIFT进行了改进,诞生了SIFT的一系列变种。最重要也是最坑爹的,SIFT算法申请了专利,现在好像是属于英属哥伦比亚大学。在C++调用时要配置OpenCV+Cmake,在matlab里面使用复现整个算法的计算推导过程,都较为繁琐。但如果使用python3的话,有个取巧的办法。直接在CMD命令窗口里输入:

    pip install opencv-contrib-python 3.3.0.10
    

    踩过了不少坑,才知道可能是因为专利的问题,python3里只有这一版的openCV封装了SIFT函数。其它版本openCV库都不行,除开愿意回退到python2,使用对应版本的openCV。
    如果因为安装了Anaconda,开发环境已自动配置了更高版本的openCV库,只需要在CMD命令窗口里输入:'pip uninstall opencv'卸载掉之前的,安装旧版3.3.0.10就可以了。

  2. 代码实现
    直接调用了cv2库里的SIFT函数:

"""
Created on Sat Sep 29 14:43:02 2018

@author: qgl
"""

import numpy as np
import cv2
from matplotlib import pyplot as plt

imgname = 'C:/Users/qgl/Desktop/articles/test1.jpg'

sift = cv2.xfeatures2d.SIFT_create()

img = cv2.imread(imgname)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
kp,des = sift.detectAndCompute(img,None)

cv2.imshow('gray',gray)
cv2.waitKey(0)

img1=cv2.drawKeypoints(img,kp,img,color=(255,0,255))

cv2.imshow('point',img1)
cv2.waitKey(0)

效果图
python3 SIFT算法的实现_第1张图片 python3 SIFT算法的实现_第2张图片

你可能感兴趣的:(python3)