В моем коде я хочу получить доступ к каждому элементу матрицы типа Mat. Матрица получается как выход алгоритма SIFT.
SiftFeatureDetector detector; detector.compute(image, keypoints, siftFeatureDescriptor); cout<<siftFeatureDescriptor.at<double>(0,0);
Когда я попытался запустить этот код, он выдает исключение в функции siftFeatureDescriptor.at.
Когда я попытался изменить double на int, исключение исчезло, но оно отображает неправильное значение 1114898432, тогда как фактическое значение равно 49.
Используя Mat.type, я нашел тип матрицы 32FC1.
Пожалуйста помоги.
если 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);
Я основываю код на этом примере