Исключение функции Mat.at

0

В моем коде я хочу получить доступ к каждому элементу матрицы типа Mat. Матрица получается как выход алгоритма SIFT.

SiftFeatureDetector detector; detector.compute(image, keypoints, siftFeatureDescriptor); cout<<siftFeatureDescriptor.at<double>(0,0);

Когда я попытался запустить этот код, он выдает исключение в функции siftFeatureDescriptor.at.

Когда я попытался изменить double на int, исключение исчезло, но оно отображает неправильное значение 1114898432, тогда как фактическое значение равно 49.

Используя Mat.type, я нашел тип матрицы 32FC1.

Пожалуйста помоги.

  • 2
    если mat.type равен 32FC1, вам обязательно нужно получить к нему доступ с помощью <float>
  • 0
    Изменение float для всех используемых переменных решило проблему. Благодарю.
Показать ещё 1 комментарий
Теги:
opencv

1 ответ

2

если mat.type 32FC1, вы должны получить к нему доступ с помощью at<float>.

Кроме того, я думаю, вы можете смешивать "детектор" и "экстрактор". Обычно вы должны использовать их следующим образом:

// initialize detector and extractor
  FeatureDetector* detector = new SiftFeatureDetector(
                                     0, // nFeatures
                                     4, // nOctaveLayers
                                     0.04, // contrastThreshold
                                     10, //edgeThreshold
                                     1.6 //sigma
                                     );
  DescriptorExtractor* extractor = new SiftDescriptorExtractor();

  // detect the keypoints
  vector<KeyPoint> keypoints;
  detector->detect(img, keypoints);

  // now compute the descriptors for each keypoint
  Mat descriptors;
  extractor->compute(img, keypoints, descriptors);

Я основываю код на этом примере

Ещё вопросы

Сообщество Overcoder
Наверх
Меню