summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/ovision/imgFile.cc
diff options
context:
space:
mode:
authorgaillaro2004-05-01 11:52:08 +0000
committergaillaro2004-05-01 11:52:08 +0000
commit109db2b0cce1b89c75e32f3705a1c5975391b3c5 (patch)
tree28da709aee1cbab296b99378e42a1e737403addf /2004/i/nono/src/ovision/imgFile.cc
parentf95f1fb2bc439178a9e7ca6102b57c02c791f3f0 (diff)
Ajout de ovision.
Diffstat (limited to '2004/i/nono/src/ovision/imgFile.cc')
-rw-r--r--2004/i/nono/src/ovision/imgFile.cc137
1 files changed, 137 insertions, 0 deletions
diff --git a/2004/i/nono/src/ovision/imgFile.cc b/2004/i/nono/src/ovision/imgFile.cc
new file mode 100644
index 0000000..1ee5df6
--- /dev/null
+++ b/2004/i/nono/src/ovision/imgFile.cc
@@ -0,0 +1,137 @@
+// imgFile.cc - Classe Image
+// nono - Programme du robot Efrei Robotique I1-I2 2004
+// Copyright (C) 2004 Olivier Gaillard
+
+/// @file imgFile.cc Chargement des images, conversion en YUV, HSI, detection des contours, transformation d'une image segmentee en RGB, ecriture de l'image sur le disque
+
+#include "imgFile.h"
+#include <iostream>
+#include <stdlib.h>
+#include <math.h>
+using namespace std;
+
+/// tableau de couleur utlisation pour la creation de l'image segmentee
+unsigned char tabCol[9][3] =
+ {{0, 0, 0}, {255, 255, 255}, {0, 0, 255},
+ {0,255,0}, {255, 0, 0}, {0, 150, 60},
+ {150,60,0}, {0, 150, 60}, {20, 50, 120}};
+
+
+
+/// Constructor ImgFile
+ImgFile::ImgFile(void)
+{
+ // Initialisation de DevIL.
+ ilInit();
+}
+
+
+/// Destructor ImgFile
+ImgFile::~ImgFile(void)
+{
+ /// Fermeture de DevIl
+ ilShutDown();
+}
+
+
+/// Ouvre un fichier
+int ImgFile::ReadRaw (char *filename)
+{
+ ILuint ImgFileId;
+
+ // Supprime l'id d'une image dans DevIL
+ if (tabData) {
+ ilDeleteImages(1, &ImgFileId);
+ }
+
+ // Generation de l'id
+ ilGenImages(1, &ImgFileId);
+
+ // Selection de l'image courante
+ ilBindImage(ImgFileId);
+
+ // Chargement de l'image avec DevIL
+ if (!ilLoadImage(filename)) {
+ cerr << "Could not open file...exiting." << endl;
+ return 0;
+ }
+
+ // Caracteristiques d'une image
+ height = ilGetInteger(IL_IMAGE_HEIGHT);
+ width = ilGetInteger(IL_IMAGE_WIDTH);
+ nbPixels = height*width;
+
+ cout << "Width: " << width << " Height: " << height
+ << " Depth: " << ilGetInteger(IL_IMAGE_DEPTH) << " Bpp: " << ilGetInteger(IL_IMAGE_BITS_PER_PIXEL) << endl;
+
+ // Recuperation des donnees RGB
+ if (tabData) delete [] tabData;
+ tabData = new unsigned char[nbPixels*3];
+ ilCopyPixels(0,0,0,width,height,1,IL_RGB,IL_UNSIGNED_BYTE,(ILvoid*)tabData);
+
+ return 1;
+}
+
+/// Cree un tableau en RGB pour l'affichage a partir d'une image segmentee
+
+/// @param *tabIn pointeur vers un tableau de donnees segmentees
+/// @param *tabOut pointeur vers un tableau de donnees RGB
+void ImgFile::DoImg(unsigned char *tabIn, unsigned char *tabOut) {
+ if (tabIn) {
+ // Change les couleurs segmentees en valeurs RGB pour l'affichage
+ for (int i=0; i<(int)(nbPixels);i++) {
+ tabOut[i*3] = tabCol[tabIn[i]][0];
+ tabOut[i*3+1] = tabCol[tabIn[i]][1];
+ tabOut[i*3+2] = tabCol[tabIn[i]][2];
+ }
+ }
+ else {
+ // Si la table donnee est vide on renvoie des couleurs noires
+ for (int i=0; i<(int)(nbPixels);i++) {
+ tabOut[i*3] = 0;
+ tabOut[i*3+1] = 0;
+ tabOut[i*3+2] = 0;
+ }
+ }
+}
+
+
+/// Cree une image et l'ecrit sur le disque
+
+/// @param *filename nom du fichier cree
+/// @param *tabSegm tableau de donnees segmentees a transformer en image
+void ImgFile::WriteSegm (char *filename, unsigned char *tabSegm) {
+
+ ILuint ImgFileIdSegm;
+ unsigned char *tabOut;
+
+ // Verification du pointeur passe en argument
+ if (!tabSegm) {
+ cerr << "ImgFile::Write : Rien a ecrire dans le fichier\n";
+ return;
+ }
+
+ // Preparation des donnees
+ tabOut = new unsigned char[nbPixels*3];
+
+ DoImg(tabSegm, tabOut);
+
+ // Generation de l'id
+ ilGenImages(1, &ImgFileIdSegm);
+
+ // Selection de l'image courante
+ ilBindImage(ImgFileIdSegm);
+
+ // Creation de l'image test
+ ilTexImage(width, height*2, 1, 3, IL_RGB, IL_UNSIGNED_BYTE, NULL);
+ ilSetPixels(0,height,0,width,height,1,IL_RGB, IL_UNSIGNED_BYTE, (ILvoid*)tabOut);
+ ilSetPixels(0,0,0,width,height,1,IL_RGB, IL_UNSIGNED_BYTE, (ILvoid*)tabData);
+ iluRotate(180);
+
+ // Sauvegarde de l'image
+ ilEnable(IL_FILE_OVERWRITE);
+ ilSaveImage(filename);
+
+ // Libere la memoire
+ delete [] tabOut;
+}