summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/ovision/convertImg.cc
blob: 111e4a8347ca18529324a7deec749f4e8cdbc17d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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)));
    }
}