summaryrefslogtreecommitdiff
path: root/2005/i/robert/src/ovision/see/convertImg.cc
diff options
context:
space:
mode:
Diffstat (limited to '2005/i/robert/src/ovision/see/convertImg.cc')
-rw-r--r--2005/i/robert/src/ovision/see/convertImg.cc98
1 files changed, 98 insertions, 0 deletions
diff --git a/2005/i/robert/src/ovision/see/convertImg.cc b/2005/i/robert/src/ovision/see/convertImg.cc
new file mode 100644
index 0000000..9bc87ea
--- /dev/null
+++ b/2005/i/robert/src/ovision/see/convertImg.cc
@@ -0,0 +1,98 @@
+#include "convertImg.hh"
+
+#include <math.h>
+
+/// Renvoie le minimum entre 2 nombres
+inline unsigned char min (unsigned char a, unsigned char b)
+{
+ if (a<b) return a;
+ else return b;
+}
+
+/// Convertit un tableau de donnees RGB en YUV
+void
+ConvertImg::RGBtoYUV (Img &img)
+{
+ unsigned char r,g,b;
+ // Parcours du tableau et conversion des valeurs RGB en YUV
+ for (unsigned long i=0; i<img.nbPixels_; i++)
+ {
+ r = img.tabData_[i*3];
+ g = img.tabData_[i*3+1];
+ b = img.tabData_[i*3+2];
+ img.tabData_[i*3] = (unsigned char)(0.299*r + 0.587*g + 0.114*b); // Y
+ img.tabData_[i*3+1] = (unsigned char)(0-0.147*r - 0.289*g + 0.437*b + 0.5); // U
+ img.tabData_[i*3+2] = (unsigned char)(00.615*r - 0.515*g - 0.100*b + 0.5); // V
+ }
+ img.colorMode_ = Image::yuv;
+}
+
+/// Convertit un tableau de donnees RGB en YUV
+void
+ConvertImg::RGBtoHSI (Img &img)
+{
+ unsigned char r,g,b;
+ // Parcours du tableau et conversion des valeurs RGB en HSI
+ for (unsigned long i=0; i<img.nbPixels_; i++)
+ {
+ r = img.tabData_[i*3];
+ g = img.tabData_[i*3+1];
+ b = img.tabData_[i*3+2];
+ img.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
+ img.tabData_[i*3+1] = (unsigned char)(1-min(min(r,g),b)); // S
+ img.tabData_[i*3+2] = (unsigned char)(0.33f*(r+g+b)); // I
+ }
+ img.colorMode_ = Image::hsi;
+}
+
+/// Convertit un tableau de donnees YUV en RGB
+void
+ConvertImg::YUVtoRGB (Img &img)
+{
+ unsigned char y,u,v;
+ // Parcours du tableau et conversion des valeurs YUV en RGB
+ for (unsigned long i=0; i<img.nbPixels_; i++) {
+ y = img.tabData_[i*3];
+ u = img.tabData_[i*3+1];
+ v = img.tabData_[i*3+2];
+ img.tabData_[i*3] = (unsigned char)(y + (1.4075 * (v - 128)));
+ img.tabData_[i*3+1] = (unsigned char)(y + ((0.3455 * (u - 128)) - (0.7169 * (v - 128))));
+ img.tabData_[i*3+2] = (unsigned char)(y + (1.7790 * (u - 128)));
+ }
+ img.colorMode_ = Image::rgb;
+}
+
+/// Convertit une image de BGR en RGB
+void
+ConvertImg::BGRtoRGB (Img &img)
+{
+ unsigned char b;
+ unsigned char *tab;
+ tab = img.tabData_;
+ // Parcours du tableau et conversion des valeurs BGR en RGB
+ for (unsigned long i=0; i<img.nbPixels_; i++)
+ {
+ b = *tab;
+ *tab = *(++(++tab));
+ *tab = b;
+ ++tab;
+ }
+ img.colorMode_ = Image::rgb;
+}
+
+/// Convertit une image en RGB
+void
+ConvertImg::ConvertToRGB (Img &img)
+{
+ switch (img.colorMode_)
+ {
+ case Image::bgr:
+ BGRtoRGB (img);
+ break;
+ case Image::yuv:
+ YUVtoRGB (img);
+ break;
+ default:
+ break;
+ }
+}