summaryrefslogtreecommitdiff
path: root/2003/i/buzz/src/vision
diff options
context:
space:
mode:
Diffstat (limited to '2003/i/buzz/src/vision')
-rw-r--r--2003/i/buzz/src/vision/image.cc23
-rw-r--r--2003/i/buzz/src/vision/image.h5
-rw-r--r--2003/i/buzz/src/vision/test_vision.cc21
3 files changed, 36 insertions, 13 deletions
diff --git a/2003/i/buzz/src/vision/image.cc b/2003/i/buzz/src/vision/image.cc
index 27f13f8..48fc445 100644
--- a/2003/i/buzz/src/vision/image.cc
+++ b/2003/i/buzz/src/vision/image.cc
@@ -51,15 +51,16 @@ Image::Image (const char *filename, const Thresholds *thresholds)
// Initalisation
m_groups = 0;
m_thresholds = thresholds;
+ m_camera = 0;
}
-Image::Image (const Camera &camera, const Thresholds *thresholds)
+Image::Image (const Camera *camera, const Thresholds *thresholds)
{
+ // Copie la camera.
+ m_camera = camera;
// Allocate memory...
- camera.getSize (m_width, m_height);
+ m_camera->getSize (m_width, m_height);
m_image = new unsigned char [m_width * m_height * 4];
- // Lit l'image. TODO si = 0.
- while (!camera.read (m_image));
// Alloue de la memoire pour les zones.
m_zones = new unsigned char [m_width * m_height];
// Initalisation
@@ -327,3 +328,17 @@ Image::dump (const char *filename)
// Close it.
fclose (fp);
}
+
+// Relit les données de la camera et fait les analyses.
+bool
+Image::reread (void)
+{
+ // Lit l'image.
+ if (m_camera->read (m_image) == 0)
+ return false;
+ filter ();
+ group ();
+ groupFilter ();
+ return true;
+}
+
diff --git a/2003/i/buzz/src/vision/image.h b/2003/i/buzz/src/vision/image.h
index cbee54e..c4f1feb 100644
--- a/2003/i/buzz/src/vision/image.h
+++ b/2003/i/buzz/src/vision/image.h
@@ -21,10 +21,11 @@ class Image
unsigned char *m_zones;
ImageGroup *m_groups;
const Thresholds *m_thresholds;
+ const Camera *m_camera;
public:
// Constructeurs.
Image (const char *filename, const Thresholds *thresholds);
- Image (const Camera &camera, const Thresholds *thresholds);
+ Image (const Camera *camera, const Thresholds *thresholds);
// Destructeur.
~Image (void);
// Filtre l'image pour trouver les zones.
@@ -37,6 +38,8 @@ class Image
void dump (const char *filename);
// Filtre les packets de pixels.
void groupFilter (void);
+ // Relit les données de la camera et fait les analyses.
+ bool reread (void);
protected:
// Fait des packets de pixels sur les lignes.
void groupLine (void);
diff --git a/2003/i/buzz/src/vision/test_vision.cc b/2003/i/buzz/src/vision/test_vision.cc
index d60d915..91a5f7f 100644
--- a/2003/i/buzz/src/vision/test_vision.cc
+++ b/2003/i/buzz/src/vision/test_vision.cc
@@ -20,20 +20,25 @@ main (int argc, char **argv)
{
t = new Thresholds ("rc/vision/palets.rgb");
c = new Camera ();
- sleep (1);
- i = new Image (*c, t);
- i->filter ();
- i->group ();
- i->groupFilter ();
- i->dumpGroups ();
- i->dump ("dump.ppm");
+ i = new Image (c, t);
+ for (int j = 0; j < 5; ++j)
+ {
+ if (i->reread ())
+ {
+ char s[256];
+ i->dumpGroups ();
+ sprintf (s, "dump%d.ppm", j);
+ i->dump (s);
+ }
+ sleep (1);
+ }
delete i;
delete c;
delete t;
}
catch (const char *s)
{
- fprintf (stderr, "test_image: %s\n", s);
+ fprintf (stderr, "test_vision: %s\n", s);
return 1;
}
return 0;