2018-02-03:使用SIFT

2018-02-03  本文已影响456人  BL_Fang

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

得到的结果为


原始图像 结果图
上一篇下一篇

猜你喜欢

热点阅读