本代码参考的图书是《Opencv 3计算机视觉 Python语言实现(原书第二版)》。python版本3.6;opencv版本3.3.0。代码如下:
import cv2
import numpy as np
from os.path import join
# placeholder path
datapath = "C:/Users/ZXY/Desktop/mubiaogenzong/TrainImages"
def path(cls,i):
return "%s/%s%d.pgm" % (datapath,cls,i)
pos, neg = "pos-", "neg-"
detect = cv2.xfeatures2d.SIFT_create()
extract = cv2.xfeatures2d.SIFT_create()
flann_params = dict(algorithm = 1, trees = 5)
matcher = cv2.FlannBasedMatcher(flann_params, {})
bow_kmeans_trainer = cv2.BOWKMeansTrainer(40)#40个词
extract_bow = cv2.BOWImgDescriptorExtractor(extract, matcher)
def extract_sift(fn):
im = cv2.imread(fn,0)
return extract.compute(im, detect.detect(im))[1]
for i in range(8):
bow_kmeans_trainer.add(extract_sift(path(pos,i)))
#print(path(pos,i))
bow_kmeans_trainer.add(extract_sift(path(neg,i)))
#print(path(neg,i))
#print(bow_kmeans_trainer)
voc = bow_kmeans_trainer.cluster()
extract_bow.setVocabul