OpenCV - SIFT/SURF

OpenCV - SIFT/SURF Python

1.OpenCV中使用SIFT首先安装的包:
打开终端安装:sudo pip install opencv-contrib-python==3.4.2.16 新版的opencv可能没有xfeatures2d。
2. SIFT提取特征:用于检测斑点,使用difference of Gaussians(DoG)

import cv2
from matplotlib import pyplot as plt

path = '9.jpg'
img = cv2.imread(path)
img1 = cv2.imread(path)
plt.imshow(img)  #图1
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
sift = cv2.xfeatures2d.SIFT_create()
#得到特征点
keypoints, descriptor = sift.detectAndCompute(gray, None)

img = cv2.drawKeypoints(image=img1, outImage=img, keypoints=keypoints, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS, color=(51, 163, 236))
plt.imshow(img)  #图2

img = cv2.drawKeypoints(image=img1, outImage=img, keypoints=keypoints, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG, color=(51, 163, 236))
plt.imshow(img) #图3

img = cv2.drawKeypoints(image=img1, outImage=img, keypoints=keypoints, flags = cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS, color=(51, 163, 236))
plt.imshow(img) #图4

img = cv2.drawKeypoints(image=img1, outImage=img, keypoints=keypoints, flags = cv2.DRAW_MATCHES_FLAGS_DEFAULT, color=(51, 163, 236))
plt.imshow(img) #图5

图2-5主要是改变了cv2.drawKeypoints()中的flags的参数,不同的参数表示不同的显示效果

flags = cv2.DRAW_MATCHES_FLAGS_DEFAULT:创建输出图像矩阵,使用现存的输出图像绘制匹配对和特征点,对每一个关键点只绘制中间点
flags = cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG:不创建输出图像矩阵,而是在输出图像上绘制匹配对
flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS:对每一个特征点绘制带大小和方向的关键点图形
flags = cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS:单点的特征点不被绘制

color 表示标注的颜色

图1图1
图2图2
图3在这里插入图片描述
图4在这里插入图片描述
图5在这里插入图片描述
3.SURF检测斑点,使用Hessian算法

surf = cv2.xfeatures2d.SURF_create()
keypoints, descriptor = surf.detectAndCompute(gray, None)
img = cv2.drawKeypoints(image=img1, outImage=img, keypoints=keypoints, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS, color=(51, 163, 236))
plt.imshow(img)   #图6
img = cv2.drawKeypoints(image=img1, outImage=img, keypoints=keypoints, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG, color=(51, 163, 236))
plt.imshow(img)
img = cv2.drawKeypoints(image=img1, outImage=img, keypoints=keypoints, flags = cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS, color=(51, 163, 236))
plt.imshow(img)
img = cv2.drawKeypoints(image=img1, outImage=img, keypoints=keypoints, flags = cv2.DRAW_MATCHES_FLAGS_DEFAULT, color=(51, 163, 236))
plt.imshow(img)

图6在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章