资源简介
利用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分割
评论
共有 条评论