#include "ovision.hh" #include /// Constructeur OVision::OVision (bool useSocket) : oconfig_ (0), img_ (0), colorTab_ (0), segm_ (0), group_ (0), mag_ (0), step_ (0), aim_ (Group::undefined) //map_ (0), { // socket_ = 0; } /// Destructeur OVision::~OVision () { delete oconfig_; delete img_; delete segm_; delete group_; delete mag_; delete space_; } /// Iniialisatoin de toutes les classes void OVision::init (const Group::ZoneType aim) { aim_ = aim; // Initialisation des classes oconfig_ = new OConfig; img_ = new Img; // Initialisation caméra v4l_ = new Video4Linux ("/dev/video", oconfig_->inputColor, oconfig_->brightness); v4l_->calibrate (); v4l_->setAdaptive (0); // Prendre une image pour que la taille de l'image soit configuré img_->load (*v4l_); colorTab_ = new ColorTable; segm_ = new SegmTable (*colorTab_); segm_->setMode (oconfig_->inputColor); group_ = new Group (img_, segm_); mag_ = new Magnifier (img_, segm_, aim_); // Mode de couleur utilisé pour les la segmentation segm_->setMode (oconfig_->inputColor); space_ = new Space (img_->width_, img_->height_); // 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); } /// Prends une image avec la caméra void OVision::takeShoot () { img_->load (*v4l_); } /// Analyse une image void OVision::update () { // Compteur du nombre d'image traité step_++; // Cherche les balles group_->jumpPoints (oconfig_->groupColor); // Analyse et tri la liste de zones trouvées mag_->analyse (group_->getZoneList ()); // 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); } */ } /// Affiche d'info sur l'update void OVision::showInfo () const { std::cout << "-----------------------------------------------------------------" << std::endl; std::cout << "image n°" << step_ << std::endl; // Info sur les zones trouvées // group_->showZones(); // mag_->showItems (Group::redSkittle); std::cout << "-------------\n" << std::endl; std::cout << "-------------\n" << std::endl; } /// Renvoie la position bool OVision::getBall (double &x, double &y) const { return false; // return map_->GetCurBallPos (x, y); } /// Renvoie le pointeur sur Video4Linux Video4Linux & OVision::getVideo4Linux () const { return *v4l_; } /// Envoie l'image par socket_ void OVision::sendImg () { // socket__->Send (img_->tabData); }