summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/ovision/ovision.cc
blob: db9785713807b5beb359eff5725ed64d297acf0c (plain)
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
102
103
104
#include "ovision.h"
#include <iostream>
    
/// Constructeur
OVision::OVision ()
{
    // Initialisation des classes
    oconfig = 	new OConfig;
    img =	new Img;

    // Initialisation cam�ra
    Video4Linux::ColorSpace cs;
    cs = Video4Linux::rgb;
    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);
    map =	new Map (space);

    // Construction du r�seau de neurones
    segm->BuildNN (oconfig->nn_NbCouleurs, LOAD_FROM_FILE);

    // Ouverture ou cr�ation de la table de couleur
    if (!segm->LoadColorTableFile ())
	segm->DoColorTable ();

    step = 0;
}

/// Destructeur
OVision::~OVision ()
{
    delete oconfig;
    delete img;
    delete segm;
    delete group;
    delete map;
}

/// 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 ();
}