2018-02-03:使用SIFT

1.下載opencv,如果使用3.0及以上版本,一定要使用opencv-contrib-python,因?yàn)樵趏pencv-python中移除了SIFT,SURF等算法。移除的理由是這些算法受專(zhuān)利保護(hù)。最簡(jiǎn)單的方法為在命令行中運(yùn)行

pip install opencv-contrib-python

2.使用SIFT進(jìn)行特征點(diǎn)提取的事例如下:

#coding=utf-8
#注意如果腳本中要使用中文,則需要指明編碼格式
import cv2
import sys

#imgpath為圖像路徑
imgpath = sys.argv[1]

# 將圖像讀取進(jìn)來(lái), 基本可以支持任意標(biāo)準(zhǔn)格式的文件
# imread(filename, [flags]), flags表示圖像的色彩,可選
img = cv2.imread(imgpath)

# 將圖像轉(zhuǎn)化為灰度圖像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 構(gòu)造一個(gè)sift對(duì)象
sift = cv2.xfeatures2d.SIFT_create()

# 檢測(cè)關(guān)鍵點(diǎn)和對(duì)應(yīng)的描述子
#cv2.SIFT.detectAndCompute(image, mask[, descriptors[, useProvidedKeypoints]])
# 如果需要在圖像中的某一個(gè)區(qū)域識(shí)別,則設(shè)置mask
keypoints, descripter = sift.detectAndCompute(gray,None)
flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS
color = (51, 163, 236)
# 繪制關(guān)鍵點(diǎn)
# 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時(shí)退出
        break
cv2.destroyAllWindows()
  1. 運(yùn)行該腳本。假如在該腳本的同一目錄下有名為img.jpeg的圖,則:
 python main.py img.jpeg

得到的結(jié)果為


原始圖像
結(jié)果圖
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容