Я пытаюсь разработать c++ реализацию пакета визуального слова, используя библиотеку opencv
Я начал с тестирования функции обнаружения ключевых точек, но когда я вставляю эту инструкцию
detector->detect(img, keypoints);
, программа перестает запускать @первое изображение без какого-либо исключения.
Может ли кто-нибудь помочь мне решить эту проблему?
благодаря
void extractTrainingVocabulary(const path& basepath) {
for (directory_iterator iter = directory_iterator(basepath); iter
!= directory_iterator(); iter++) {
directory_entry entry = *iter;
if (is_directory(entry.path())) {
cout << "Processing directory " << entry.path().string() << endl;
extractTrainingVocabulary(entry.path());
} else {
path entryPath = entry.path();
if (entryPath.extension() == ".jpg") {
cout << "Processing file " << entryPath.string() << endl;
Mat img = imread(entryPath.string());
if (!img.empty())
{
cout << "not empty"<< endl;
try{
// ...
vector<KeyPoint> keypoints;
cout << "not empty"<< keypoints.empty()<<endl;
//detector->detect(img, keypoints);
} catch (const std::exception& ex) {
}
}
else
{
cout << " empty"<< endl;
}
}
}
}
}
Предполагая, что функция detector-> detect() в этом коде фактически не комментируется в вашей реализации. Мое единственное предположение заключалось в том, что функция img.empty() не возвращает правильное значение. Метод OpenCV для проверки правильности загруженного изображения использует элемент данных image.data как таковой:
if(! image.data ) // Check for invalid input
{
cout << "Could not open or find the image" << std::endl ;
return -1;
}