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在這裏插入圖片描述

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