summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/ovision/convertImg.cc
diff options
context:
space:
mode:
Diffstat (limited to '2004/i/nono/src/ovision/convertImg.cc')
-rw-r--r--2004/i/nono/src/ovision/convertImg.cc73
1 files changed, 73 insertions, 0 deletions
diff --git a/2004/i/nono/src/ovision/convertImg.cc b/2004/i/nono/src/ovision/convertImg.cc
new file mode 100644
index 0000000..111e4a8
--- /dev/null
+++ b/2004/i/nono/src/ovision/convertImg.cc
@@ -0,0 +1,73 @@
+#include "convertImg.h"
+
+#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;
+
+ img.yuv = true;
+
+ // 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
+ }
+}
+
+/// Convertit un tableau de donnees RGB en YUV
+void
+ConvertImg::RGBtoHSI (Img &img)
+{
+ unsigned char r,g,b;
+
+ img.hsi = true;
+
+ // 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
+ }
+}
+
+
+/// Convertit un tableau de donnees YUV en RGB
+void
+ConvertImg::YUVtoRGB (Img &img)
+{
+ unsigned char y,u,v;
+
+ img.yuv = false;
+
+ // 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)));
+ }
+}
+