1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
// methode de lecture des descripteur
double nbPoints = 0;
double* Features;
// chargement des descripteurs
FILE* doc = fopen(path_Model, "rb");
fread(&nbPoints, sizeof(nbPoints), 1, doc);
Features = (double*)malloc(nbPoints * 64 * sizeof(double));
fread(Features, sizeof(double), nbPoints * 64, doc);
fclose(doc);
// les données sont bien lu, pas de problème de ce coté la
Model_descriptors = Mat(nbPoints, 64, CV_32F, Features_tmp);
for (int i = 0; i < Model_descriptors.rows; i++)
{
double* ptri = Model_descriptors.ptr<double>(i);
for (int j = 0; j < Model_descriptors.cols; j++)
{
ptri[j] = Features[i*Model_descriptors.cols + j];
}
}
//méthode calculant les descripteur sur une image courante
SurfFeatureDetector detector(Params.ScoreDetecteurImage, 4, 4, false, false);
detector.detect(I_cur, Image_keypoints);
if (Image_keypoints.empty())
{
return false;
}
Image_keypoints = select_strongest(Params.NbPointImage, Image_keypoints);
if (Image_keypoints.empty())
{
return false;
}
// Extract Features
SurfDescriptorExtractor extractor;
extractor.compute(I_cur, Image_keypoints, Image_descriptors);
// methode réalisant le matching
FlannBasedMatcher matcher;
std::vector< DMatch > matches;
try
{
cout << "Image_descriptors" << endl << Image_descriptors(Range(0, 1), Range(0, 63));
cout << "Model_descriptors" << endl << Model_descriptors(Range(0, 1), Range(0, 63));
//double a=Image_descriptors.at(Point(0, 0));
matcher.match(Model_descriptors, Image_descriptors, matches);
}
catch (Exception ex)
{
cout << ex.msg;
} |
Partager