我试图通过SIFT或SURF转储汽车的关键点,并将这些关键点与视频相匹配,以便检测汽车 . 关键点使用起来比使用Haar Cascades更方便,因为我必须使用大量图像,例如5000来训练,这将需要大量的计算过程 . 来自SURF或SIFT的关键点是尺度不变的,这在每辆车中几乎是相同的 .

将关键点转储到txt文件的代码是:

import cv2
import numpy as np
import os
import cPickle

surf = cv2.xfeatures2d.SURF_create()

descriptors = []

image = cv2.imread('1.jpg')
kp, dsc = surf.detectAndCompute(image, None)
img = cv2.drawKeypoints(image, kp, image)

descriptors.append(dsc)

des = np.array(descriptors)

k = 5
bow = cv2.BOWKMeansTrainer(k)
cluster = bow.cluster(des)
add = bow.add(dsc)

f = open("descriptors.pkl", "w")
f.write(cPickle.dumps(des))
f.close()

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

之后我不知道如何匹配我用我的视频生成的txt文件中的这些关键点,有许多特征匹配算法作为强力和KNN匹配器,还有分类器作为SVM分类器,将在我阅读时使用在许多论文中

我尝试使用此图像
original image
来提取其关键点
keypoints
,并且在txt文件中提取的关键点位于此[GitHub] [3]链接中,其中包含我需要检测汽车的代码和视频 .

任何想法如何匹配这辆车的关键点与视频中的汽车('traffic.avi') .

我想用Bag of Visual Words Method检测汽车,试图这样做,但不知道如何编码

注意:我使用的是OpenCV 3.1和Python 2.7.x.