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