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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| #include "stdafx.h"
#include <sstream>
#include <time.h>
#include <fstream>
#include <iostream>
#include <highgui.h>
#include <cv.h>
#include <iomanip>
#include <opencv2/ml/ml.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/core/mat.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/legacy/compat.hpp>
#include <opencv2/nonfree/nonfree.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2\features2d\features2d.hpp>
#include <opencv2\nonfree\features2d.hpp>
using namespace std;
using namespace cv;
void save_descriptor_in_file(Mat desc)
{
//faire tourner ce programme la première fois avec « data_nosmile.txt » et la seconde avec « data_smile.txt »
ofstream myfile ("C:/Users/bahri/Desktop/haythem/SVM/features extraction/test_OpenCV_2.4.2/data_nosmile.txt",ios::app);
//ofstream myfile ("C:/Users/bahri/Desktop/haythem/SVM/features extraction/test_OpenCV_2.4.2/data_smile.txt",ios::app);
if (myfile.is_open())
{
//for(int i=0 ; i<desc.rows ; i++)
for(int i=0 ; i<10 ; i++) // on limite le nombre de descripteurs par image à 10
{
for(int j=0; j<desc.cols ; j++)//desc.cols est ici toujours égale à 128
{
myfile<<desc.at<float>(i,j)<<"\n";
}
}
}
else
{
cout<<"error : Unable to open file";
}
}
void display_image_descriptors(Mat image){
namedWindow("Descriptors", 1);
imshow("Descriptors", image);
}
void calculate_descriptor(Mat img_cropped){
SurfFeatureDetector detector(1500);
vector<KeyPoint> keypoints;
Mat descriptors;
SurfDescriptorExtractor extractor;
detector.detect(img_cropped, keypoints);
extractor.compute(img_cropped, keypoints, descriptors);
drawKeypoints(img_cropped, keypoints, img_cropped, Scalar(255,255,255), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
//display_image_descriptors(img_cropped); ////optionnel////
Mat desc = Mat(descriptors).reshape(0, keypoints.size());
save_descriptor_in_file(desc);
}
void display_image(IplImage* image){
cvNamedWindow("Image", 1 );
cvShowImage( "Image", image);
}
void load_image(int i){
ostringstream ostr;
//faire tourner ce programme la première fois avec "-11.jpg" et la seconde avec "-12.jpg"
ostr << "C:/Users/bahri/Desktop/haythem/SVM/ensemble d'entrainement/les deux ensembles/"<<i<<"-11.jpg";
//ostr << "C:/Users/bahri/Desktop/haythem/SVM/ensemble d'entrainement/les deux ensembles/"<<i<< "-12.jpg";
string s = ostr.str();
char* chemin = &s[0];
Mat img_original=cvLoadImage(chemin);
Mat img_cropped = img_original(Rect(240, 140, 180, 220));
Ptr<IplImage> img = &img_cropped.operator IplImage();
if(img !=NULL){
// display_image(img);////optionnel////
calculate_descriptor(img_cropped);
}
else{
cout<<"error: cant open image "<<i;
}
}
int main(){
//décommentez pour voir les images une à une après appui sur la touche espace
// int key=0;
// int i=1;
// do{
for(int i=1; i<=180; i++){
load_image(i);
// cout<<i<<"\n";
// key = cvWaitKey();
}
// i++;
// }while(key==32);//si appui sur la touche espace
return 0;
} |
Partager