summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/ovision/img.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/img.cc
parentf95f1fb2bc439178a9e7ca6102b57c02c791f3f0 (diff)
Ajout de ovision.
Diffstat (limited to '2004/i/nono/src/ovision/img.cc')
-rw-r--r--2004/i/nono/src/ovision/img.cc83
1 files changed, 83 insertions, 0 deletions
diff --git a/2004/i/nono/src/ovision/img.cc b/2004/i/nono/src/ovision/img.cc
new file mode 100644
index 0000000..6288404
--- /dev/null
+++ b/2004/i/nono/src/ovision/img.cc
@@ -0,0 +1,83 @@
+// img.cc - Classe Image
+// nono - Programme du robot Efrei Robotique I1-I2 2004
+// Copyright (C) 2004 Olivier Gaillard
+
+/// @file img.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 "img.h"
+#include <iostream>
+#include <stdlib.h>
+#include <math.h>
+using namespace std;
+/// Renvoie le minimum entre 2 nombres
+inline unsigned char min(unsigned char a, unsigned char b) {
+ if (a<b) return a;
+ else return b;
+}
+
+/// Constructeur
+Img::Img (void) {
+ // Initialisation des variables
+ tabData = NULL;
+ tabSegm = NULL;
+
+ yuv = hsi = 0;
+
+}
+
+/// Destructeur
+Img::~Img (void) {
+ //free tabData
+ if (tabData) delete [] tabData;
+
+}
+
+
+
+/// Convertit un tableau de donnees RGB en YUV
+void Img::RGBtoYUV() {
+ unsigned char r,g,b;
+
+ yuv = 1;
+
+ // Parcours du tableau et conversion des valeurs RBG en YUV
+ for (unsigned long i=0; i<nbPixels; i++) {
+ r = tabData[i*3];
+ g = tabData[i*3+1];
+ b = tabData[i*3+2];
+
+ tabData[i*3] = (unsigned char)(0.299*r + 0.587*g + 0.114*b); // Y
+ tabData[i*3+1] = (unsigned char)(0-0.147*r - 0.289*g + 0.437*b + 0.5); // U
+ tabData[i*3+2] = (unsigned char)(00.615*r - 0.515*g - 0.100*b + 0.5); // V
+ }
+}
+
+/// Convertit un tableau de donnees RGB en YUV
+void Img::RGBtoHSI() {
+ unsigned char r,g,b;
+
+ hsi = 1;
+
+ // Parcours du tableau et conversion des valeurs RBG en HSI
+ for (unsigned long i=0; i<nbPixels; i++) {
+ r = tabData[i*3];
+ g = tabData[i*3+1];
+ b = tabData[i*3+2];
+
+ tabData[i*3] = (unsigned char)(acos((r-0.5f*g-0.5f*b)/(sqrt(1.0f*(r-g)*(r-g)+(r-b)*(g-b))))); // H
+ tabData[i*3+1] = (unsigned char)(1-min(min(r,g),b)); // S
+ tabData[i*3+2] = (unsigned char)(0.33f*(r+g+b)); // I
+ }
+}
+
+/// Ecrit les valeurs RGB dans un fichier
+void Img::WriteRGB(char *filename) {
+
+ FILE *file;
+ file = fopen(filename, "w+");
+
+ fwrite(tabData, 3, width*height, file);
+
+ fclose(file);
+}
+