資源簡介
利用bow訓練器進行k-means聚類,訓練svm分類器進行車輛檢測
代碼片段和文件信息
#?-*-?coding:utf-8?-*-
import?cv2
import?numpy?as?np
from?os.path?import?join
trainpath?=?‘D:\PyCharm?2018.2.2\program\image\CarData\TrainImages‘
#定義函數返回訓練集圖像的路徑
def?path(clsi):
????return?‘%s\%s%d.pgm‘%(trainpathclsi+1)
posneg?=?‘pos-‘‘neg-‘
#創建兩個SIFT對象,一個用來提取關鍵點,一個用來提取特征描述符
sift_kp?=?cv2.xfeatures2d.SIFT_create()
sift_des?=?cv2.xfeatures2d.SIFT_create()
#創建FLANN匹配器
indexParams?=?dict(algorithm=1?trees=5)
searchParams?=?{}
flann?=?cv2.FlannbasedMatcher(indexParams?searchParams)
#創建bow訓練器,指定簇數為40
bow_kmeans_trainer?=?cv2.BOWKMeansTrainer(40)
#創建bow特征提取器,視覺詞匯將作為bow提取器的輸入,bow提取器用來提取圖像的特征,與視覺單詞進行特征匹配,返回以視覺單詞為詞基的向量特征
bow_extractor?=?cv2.BOWImgDescriptorExtractor(sift_desflann)
#函數返回圖像的特征描述符,SIFT.compute(圖像,關鍵點)
def?des_extract(imgpath):
????img?=?cv2.imread(imgpath0)
????return?sift_des.compute(imgsift_kp.detect(img))[1]
#將正負樣本的描述符添加至bow訓練器中
for?i?in?range(50):
????bow_kmeans_trainer.add(des_extract(path(posi)))
????bow_kmeans_trainer.add(des_extract(path(negi)))
#cluster()函數執行k-means分類,并返回視覺詞匯,將視覺詞匯輸入到bow提取器中
vocabulary?=?bow_kmeans_trainer.cluster()
bow_extractor.setVocabulary(vocabulary)
#定義函數,返回bow提取器提取的特征描述符
def?bow_features(imgpath):
????img?=?cv2.imread(imgpath)
????return?bow_extractor.compute(img
- 上一篇:Python從入門到精通教程共40G.txt
- 下一篇:Chan-Vese分割
評論
共有 條評論