#include "ovision.h" #include /// Constructeur OVision::OVision () { oconfig = NULL; img = NULL; segm = NULL; group = NULL; map = NULL; } /// Destructeur OVision::~OVision () { delete oconfig; delete img; delete segm; delete group; delete map; } /// Iniialisatoin de toutes les classes void OVision::Init () { // Initialisation des classes oconfig = new OConfig; img = new Img; // Initialisation caméra Video4Linux::ColorSpace cs; switch (oconfig->colorAcquisition) { case RGB: cs = Video4Linux::rgb; break; case BGR: cs = Video4Linux::bgr; break; case YUV: cs = Video4Linux::yuv; break; } v4l = new Video4Linux ("/dev/video", cs, 60000); v4l->calibrate (); // Prendre une image pour que la taille de l'image soit configuré img->load (*v4l); segm = new SegmTable (img); group = new Group (img, segm); space = new Space(img->width, img->height); map = new Map (space); // Construction du réseau de neurones segm->BuildNN (oconfig->nn_NbCouleurs, LOAD_FROM_FILE); // Calibration des longueurs space->AddSetupPoint (314, 6, 100, 400); space->AddSetupPoint (237, 224, 100, 900); space->AddSetupPoint (275, 113, 100, 550); space->Setup (0.00891157, 0.258144, 403.801); // Ouverture ou création de la table de couleur if (!segm->LoadColorTableFile ()) { segm->DoColorTable (); segm->CreateColorTableFile (); } step = 0; std::cout << "Chargement OVision ................ OK" << std:endl; } /// Prends une image avec la caméra void OVision::TakeShoot () { // Prends une image img->load(*v4l); } /// Analyse une image void OVision::Update () { // Compteur du nombre d'image traité step++; // Cherche les balles group->JumpPoints(oconfig->groupColor); // Parcours la liste de balles trouvées if (group->zoneListBall) { int x,y; x = group->zoneListBall->centerx; y = img->height - group->zoneListBall->centery; space->GetLoc(x, y, x, y); } // Mets à jour la map map->AddBallsToMap (group); double balX, balY; if (map->GetCurBallPos (balX, balY)) std::cout << "Balle Courante: " << balX << " " << balY << std::endl; if (map->IsTree ()) { double treeX, treeY; map->GetTreePos (treeX, treeY); std::cout << "Tree: " << treeX << " " << treeY << std::endl; } } /// Affiche d'info sur l'update void OVision::ShowInfo () { std::cout << "-----------------------------------------------------------------" << std::endl; std::cout << "image n°" << step << std::endl; // Info sur les zones trouvées group->ShowZones(); std::cout << "-------------\n" << std::endl; std::cout << "-------------\n" << std::endl; std::cout << "Map:\n" << std::endl; // Info sur les balles trouvées map->ShowBalls (); } /// Renvoie la position bool OVision::GetBall (double &x, double &y) { return map->GetCurBallPos (x, y); } /// Renvoie le pointeur sur Video4Linux Video4Linux & OVision::GetVideo4Linux () { return *v4l; }