Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在openCV中使用弓时出错_C++_Opencv_Computer Vision - Fatal编程技术网

C++ 在openCV中使用弓时出错

C++ 在openCV中使用弓时出错,c++,opencv,computer-vision,C++,Opencv,Computer Vision,我正在尝试基于以下内容构建分类器应用程序:在openCV中使用BOW。 加载所有训练图像并提取所有描述符后,我试图形成一个词汇表,但当我使用函数集群时,响应时间非常长。事实上,我可以让它运行几个小时。你知道为什么会这样吗? 下面是一个代码示例: Classifier::Classifier(int clusters, SImage* img){ _clusters = clusters; _featureDetector = new SurfFeatureDetector(400); _

我正在尝试基于以下内容构建分类器应用程序:在openCV中使用BOW。 加载所有训练图像并提取所有描述符后,我试图形成一个词汇表,但当我使用函数集群时,响应时间非常长。事实上,我可以让它运行几个小时。你知道为什么会这样吗? 下面是一个代码示例:

Classifier::Classifier(int clusters, SImage* img){

_clusters = clusters;   
_featureDetector = new SurfFeatureDetector(400);
_descriptorExtractor = (
    new OpponentColorDescriptorExtractor(
        Ptr<DescriptorExtractor>(new SurfDescriptorExtractor())
        )
    );
_descriptorMatcher = DescriptorMatcher::create("BruteForce-Hamming");

_bowDescriptorExtractor = new BOWImgDescriptorExtractor(_descriptorExtractor,_descriptorMatcher);
_bowtrainer = new BOWKMeansTrainer(100);


// building vocabulary and orginaizing training set
_vocab = build_vocab();

_bowDescriptorExtractor->setVocabulary(_vocab);

cout << "Initialized" << endl;

}


Mat Classifier::build_vocab() {

Mat training_descriptors(1, _descriptorExtractor->descriptorSize(), _descriptorExtractor->descriptorType());

for (images in training folder...) {

            // getting training Mat
            //cout << category << '\n';

            Mat im, desc;
            im = imread(filename);

            cout << "extract descriptors.." << endl;

            vector<KeyPoint> kp;

            _featureDetector->detect(im, kp);

            _descriptorExtractor->compute(im, kp, desc);

            training_descriptors.push_back(desc);
        }
    }

    cout << "Total decriptors: " << training_descriptors.rows << endl;

    _bowtrainer->add(training_descriptors);
    cout << "cluster BOW features" << endl;

    Mat vocabulary = _bowtrainer->cluster(); // <---- Here is where the program halts.


    return vocabulary;
}
这显然是非常通用和简单的,但我似乎不能使用这个函数,也许我使用的程序是错误的


问候。

您的培训文件夹中大致有多少张图片?另外,还有一个小问题,传递给分类器构造函数的int集群从未被使用过,我想你是想把它传递给新的BOWKMeansTrainerclusters。@NicholasBetsworth感谢你的回答。这是通过我刚刚修改的代码之前发布,所以它会更容易阅读,所以我一定错过了。在我的训练库中有5个班,每个班有7-20个画师,总共有70幅左右的图片,