• 大小: 3KB
    文件类型: .py
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: Python
  • 标签: 车辆检测  

资源简介

利用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

评论

共有 条评论

相关资源