OpenCV Bag of Words:断言失败(!_descriptors.empty())

时间:2014-12-16 15:55:29

标签: c++ opencv svm feature-detection

我正在尝试创建Bag-Of-Words,以便我可以稍后训练SVM。我是OpenCV的新手,所以我使用了我在互联网上找到的代码。问题是我有以下错误:

OpenCV Error: Assertion failed (!_descriptors.empty()) in add, file /build/buildd/opencv-2.4.8+dfsg1/modules/features2d/src/bagofwords.cpp, line 57
terminate called after throwing an instance of 'cv::Exception'
  what():  /build/buildd/opencv-2.4.8+dfsg1/modules/features2d/src/bagofwords.cpp:57: error: (-215) !_descriptors.empty() in function add

Aborted (core dumped)

以下是代码:

#include <stdio.h>
#include <stdlib.h>

#include <opencv2/opencv.hpp>
#include <fstream>
#include <iostream>
#include <string>

#include <dirent.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>


using namespace cv;
using namespace std;

int main(int argc, char** argv)
{

    Ptr<FeatureDetector> features = FeatureDetector::create("FAST");
    Ptr<DescriptorExtractor> descriptors = DescriptorExtractor::create("FAST");
    Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("FlannBased");

    //defining terms for bowkmeans trainer
    TermCriteria tc(TermCriteria::MAX_ITER + TermCriteria::EPS, 10, 0.001);
    int dictionarySize = 1000;
    int retries = 1;
    int flags = KMEANS_PP_CENTERS;

    BOWKMeansTrainer bow_trainer(dictionarySize, tc, retries, flags);
    BOWImgDescriptorExtractor bowDE(descriptors, matcher);

    //training data now
    Mat mat_features1, mat_features2;

    Mat img = imread("../positive_images/2014-12-07 19-55-07 804ea51d (1).JPG", 0);
    Mat img2 = imread("../positive_images/Pictures23.bmp_0000_0342_0104_0564_0543.png", 0);

    vector<KeyPoint> keypoints, keypoints2;

    features->detect(img, keypoints);
    features->detect(img2,keypoints2);

    descriptors->compute(img, keypoints, mat_features1);
    descriptors->compute(img2, keypoints2, mat_features2);

    bow_trainer.add(mat_features1);
    bow_trainer.add(mat_features2);

    Mat dictionary = bow_trainer.cluster();
    bowDE.setVocabulary(dictionary);

    return 0;
}

以下是编译代码的方法:

g++ BOW_creator.cpp -o BOW_creator `pkg-config --cflags --libs opencv`

你知道问题是什么吗?你能告诉我怎么解决吗? 如果您需要我提供更多信息,请与我们联系。

0 个答案:

没有答案