如何在图像上训练OpenCV SVM分类器

时间:2017-08-22 07:19:58

标签: python image opencv

该任务的目的是通过SVM对图像进行分类。变量'图像'应该包含图像信息,相应地labels包含图像标签。我如何构建imageslabels应具有哪些格式和尺寸?我尝试不成功地images成为一个Python数组(附加展平图像)然后,在另一次尝试中,Numpy数组:

images=np.zeros((number_of_images, image_size))
labels=np.zeros((number_of_images, 1))

svm=cv2.SVM()
svm.train(images, labels)

这是解决问题的正确方法吗?如果是,那么培训分类器的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

我不认为您可以使用原始图像数据来训练SVM模型。好吧,你可以,但它不会很有成效。

基本方法是从每个图像提取某些功能,并使用这些功能来训练您的模型。一组要素形成单词词典,每个词都描述您的图像。由于您使用相同的单词集来描述每个图像,因此您可以比较与不同图像对应的要素。 This link介绍了更多细节,请查看。

接下来是什么?

  1. 为算法选择一个特征提取器 - HOG,SURF,SIFT(link
  2. 从每张图片中提取要素。您将获得一个与images array相同长度的数组。
  3. 初始化词袋(BoG)模型
  4. 使用BoG培训SVM
  5. 有用的链接:

    1. C++ vey detailed example
    2. Documentation for existing BOG classifier