2018-02-03:使用SIFT

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

得到的结果为


原始图像
结果图
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容