python3 SIFT算法的简单实现
-
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就可以了。 -
代码实现
直接调用了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)
效果图