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()
- 运行该脚本。假如在该脚本的同一目录下有名为img.jpeg的图,则:
python main.py img.jpeg
得到的结果为
原始图像 结果图
网友评论