Я пытаюсь сделать словарь дескрипторов с помощью OpenCV. Когда я использую метод .Cluster() из BOWKmeansTrainer, мое приложение выдает необработанное исключениеПочему я получаю необработанное исключение при попытке вычислить кластеры
OpenCV Error: Assertion failed (data.dims <= 2 && type == CV_32F && K > 0) in un known function, file ......\src\opencv\modules\core\src\matrix.cpp, line 2485 Unknown exception
Я не могу понять, почему это происходит. Я попытался изменить параметры, но это не помогло.
Не могли бы вы дать мне несколько идей, как я могу решить эту проблему?
INT основной (интермедиат ARGC, символ * ARGV []) {
const int countClusters = 2;
vector<string> fileList;
GetFilesInFolder(folder_one, fileList);
vector<bool> trainMask(fileList.size());
InitRandomBoolVector(trainMask, 0.1);
Ptr<FeatureDetector> keypointsDetector = FeatureDetector::create("HARRIS");
Ptr<DescriptorExtractor> descriptorsExtractor = DescriptorExtractor::create("BRIEF");
Mat descriptors;
Mat voc;
TermCriteria tc(TermCriteria::COUNT + TermCriteria::EPS, 10, 0.001);
BOWKMeansTrainer bowTrainer(vocSize,tc);
for(int i = 0;i < filesList.size();i++)
{
if(is_voc.at(i))
{
vector<KeyPoint> keypoints;
Mat image = imread(filesList.at(i));
keypointsDetector->detect(image,keypoints);
descriptorsExtractor->compute(image,keypoints,descriptors);
bowTrainer.add(descriptors);
}
}
try
{
voc = bowTrainer.cluster();
}
catch(std::exception ex)
{
printf(ex.what());
}
return 0;
}
Сообщение об исключении сообщает вам, в чем проблема. Прочтите это медленно и осторожно. – karlphillip
Я ему помогаю: 'размеры <= 2' AND' type == CV_32F' AND 'K> 0'. Поэтому либо выберите другой тип, либо получите больше измерений. –
У меня такое же исключение, которое довольно сложно понять. В частности, я не понимаю, какие размеры <= 2. Есть ли кто-нибудь, предлагающий внимательно прочитать исключение, кто также может объяснить, что такое эти измерения? –