merge n°2
This commit is contained in:
Forest 2017-05-09 16:56:18 +02:00
commit 85c3af61b5

View file

@ -10,8 +10,8 @@
#include <SFML/Audio.hpp> #include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp> #include <SFML/Graphics.hpp>
#define CONFIG //#define CONFIG
//#define SFML #define SFML
#define KIRBY #define KIRBY
//#define ETOILE //#define ETOILE
@ -31,7 +31,7 @@ void Affichage_Tracking(IplImage* frame, int posX, int posY, int width, int heig
void Position_moy(IplImage* Binaire, int* posX, int * posY); //Effectue le baricentre des pixels d'une image binaire pour obtenir la postion de l'objet void Position_moy(IplImage* Binaire, int* posX, int * posY); //Effectue le baricentre des pixels d'une image binaire pour obtenir la postion de l'objet
void traitement(IplImage* frame, IplImage* HSV, IplImage* Binaire, int LowH, int HighH, int LowS, int HighS, int LowV, int HighV); //Effectue une binarisation de frame en fonction des bornes HSV void traitement(IplImage* frame, IplImage* HSV, IplImage* Binaire, int LowH, int HighH, int LowS, int HighS, int LowV, int HighV); //Effectue une binarisation de frame en fonction des bornes HSV
int image_CV2SFML(IplImage* imcv, sf::Image imsf); //Construction de imsf (RGBA) à partir de imcv (BGR), avec alpha constant (=1) int image_CV2SFML(IplImage* imcv, sf::Image imFlux); //Construction de imsf (RGBA) à partir de imcv (BGR), avec alpha constant (=1)
int main(int argc, char* argv[]) int main(int argc, char* argv[])
@ -40,9 +40,11 @@ int main(int argc, char* argv[])
int height,width,step,channels; //parameters of the image we are working on int height,width,step,channels; //parameters of the image we are working on
int posX, posY; //Position objet int posX, posY; //Position objet
int boucle; int boucle;
int angle[2] = {100,100}; int angle[2] = {100,100};
int vecX, vecY; int vecX, vecY;
#ifdef SFML #ifdef SFML
//Initialisation SFML //Initialisation SFML
@ -51,8 +53,6 @@ int main(int argc, char* argv[])
sf::Image imFlux; sf::Image imFlux;
sf::Event event; sf::Event event;
//Création de la fenetre principale
sf::RenderWindow window(sf::VideoMode(800, 600), "KirbyTrack");
#endif #endif
//Ouverture flux camera //Ouverture flux camera
@ -72,20 +72,19 @@ int main(int argc, char* argv[])
width = frame->width; width = frame->width;
step = frame->widthStep; step = frame->widthStep;
// capture size - // capture size -
CvSize size = cvSize(width,height); CvSize size = cvSize(width,height);
#ifdef SFML #ifdef SFML
//Intialisation de la texture //Création de la fenetre principale
if (!txFlux.create(width, height)){ sf::RenderWindow window(sf::VideoMode(width, height), "KirbyTrack");
printf("Erreur création texture\n");
return EXIT_FAILURE;
}
#endif #endif
// Initialize different images that are going to be used in the program // Initialize different images that are going to be used in the program
IplImage* hsv_frame = cvCreateImage(size, IPL_DEPTH_8U, 3); // image converted to HSV plane IplImage* hsv_frame = cvCreateImage(size, IPL_DEPTH_8U, 3); // image converted to HSV plane
IplImage* threshold = cvCreateImage(size, IPL_DEPTH_8U, 1); IplImage* threshold = cvCreateImage(size, IPL_DEPTH_8U, 1);
//Controle couleur //Controle couleur
#ifdef KIRBY #ifdef KIRBY
@ -118,9 +117,9 @@ int main(int argc, char* argv[])
boucle = 1; boucle = 1;
#endif #endif
//BOUCLE PRINCIPALE <<<<<<< HEAD
while(boucle)//while(window.isOpen()) while(boucle)
{ {
#ifdef SFML #ifdef SFML
boucle = window.isOpen(); boucle = window.isOpen();
@ -151,26 +150,36 @@ int main(int argc, char* argv[])
//Dessine les informations de tracking sur frame //Dessine les informations de tracking sur frame
Affichage_Tracking(frame, posX, posY, width, height); Affichage_Tracking(frame, posX, posY, width, height);
#ifdef SFML #ifdef SFML
//Affichage SFML //Affichage SFML
/* Clear the screen */ /* Clear the screen */
window.clear(sf::Color::Black); window.clear(sf::Color::Black);
//Conversion de la frame en image smfl //Conversion de la frame en image smfl
if(image_CV2SFML(frame, imFlux)){ /*if(image_CV2SFML(frame, imFlux)){
printf("Erreur conversion OpenCV-SFML\n"); printf("Erreur conversion OpenCV-SFML\n");
break; break;
} }
*/
//Enregistrement de la frame openCV
cvSaveImage("temp.jpg", frame);
//Chargement de la frame en texture SFML
if (!txFlux.loadFromFile("temp.jpg")){
printf("Erreur chargement image SFML\n" );
break;
}
spFlux.setTexture(txFlux);
spFlux.setTexture(txFlux);
window.draw(spFlux); window.draw(spFlux);
/* Update the window */
//window.display();
//sfSprite_destroy(sprite); /* Update the window */
//sfTexture_destroy(texture); window.display();
#endif #endif
//Mouvements moteurs //Mouvements moteurs
@ -262,12 +271,42 @@ void controle_moteur(int* angle){
return; return;
} }
/*Verifie que les valeurs envoyees aux moteurs sont correctes*/
int limite_moteur(int val_pwm){
int MAX_PWM = 255;
if (val_pwm > MAX_PWM || val_pwm < 0){
return 0;
}
else{
return 1;
}
}
/*
int image_CV2SFML(IplImage* imcv, sf::Image imFlux){ int image_CV2SFML(IplImage* imcv, sf::Image imFlux){
int R, G, B;
int w = imcv->widthStep;
char* ptr = imcv->imageData;
imFlux.create(imcv->width,imcv->height, NULL); //Initialise une image vide
for( int y=0; y<imcv->height; y++ ) {
//uchar* ptr = (uchar*) ( imcv->imageData + y * imcv->widthStep );
for( int x=0; x<imcv->width; x++ ) {
//Recupération du pixel
B = ptr[y*w + 3*x];
G = ptr[y*w + 3*x + 1];
R = ptr[y*w + 3*x + 2];
//Ecriture du pixel associé
imFlux.setPixel(x,y,sf::Color(R,G,B,1)); //Alpha channel = 1
}
}
return 0;
} }
*/
void traitement(IplImage* frame, IplImage* HSV, IplImage* Binaire, int LowH, int HighH, int LowS, int HighS, int LowV, int HighV){ //Effectue une binarisation de frame en fonction des bornes HSV void traitement(IplImage* frame, IplImage* HSV, IplImage* Binaire, int LowH, int HighH, int LowS, int HighS, int LowV, int HighV){ //Effectue une binarisation de frame en fonction des bornes HSV
@ -282,7 +321,9 @@ void traitement(IplImage* frame, IplImage* HSV, IplImage* Binaire, int LowH, int
CvScalar valinf={LowH,LowS,LowV}; CvScalar valinf={LowH,LowS,LowV};
CvScalar valsup={HighH,HighS,HighV}; CvScalar valsup={HighH,HighS,HighV};
cvInRangeS(HSV, valinf,valsup, Binaire); //En cas d'erreur sur les trois ligne précédentes
cvInRangeS(HSV, valinf,valsup, Binaire);
//cvInRangeS(HSV, CvScalar(LowH,LowS,LowV),CvScalar(HighH,HighS,HighV), Binaire); //cvInRangeS(HSV, CvScalar(LowH,LowS,LowV),CvScalar(HighH,HighS,HighV), Binaire);
//cvSmooth( Binaire, Binaire, CV_GAUSSIAN, 9, 9 ); //Legère suppression des parasites //cvSmooth( Binaire, Binaire, CV_GAUSSIAN, 9, 9 ); //Legère suppression des parasites