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
|
#include "CImg.h"
#include <iostream>
using namespace cimg_library;
using namespace std;
int main() {
//Construct image from reading an image file.
CImg<unsigned char> src("Tulips.jpg");
int width = src.width();
int height = src.height();
int depth = src.depth();
//New grayscale images.
CImg<unsigned char> gray1(width,height,depth,1);
CImg<unsigned char> gray2(width,height,depth,1);
unsigned char r,g,b;
unsigned char gr1 = 0;
unsigned char gr2 = 0;
/* Convert RGB image to grayscale image */
for(int i=0;i<width;i++){
for(int j=0;j<height;j++){
//Return a pointer to a located pixel value.
r = src(i,j,0,0); // First channel RED
g = src(i,j,0,1); // Second channel GREEN
b = src(i,j,0,2); // Third channel BLUE
//PAL and NTSC
//Y = 0.299*R + 0.587*G + 0.114*B
gr1 = round(0.299*((double)r) + 0.587*((double)g) + 0.114*((double)b));
//HDTV
//Y = 0.2126*R + 0.7152*G + 0.0722*B
gr2 = round(0.2126*((double)r) + 0.7152*((double)g) + 0.0722*((double)b));
gray1(i,j,0,0) = gr1;
gray2(i,j,0,0) = gr2;
}
}
//save the new grayscale images
gray1.save("gray1.bmp");
gray2.save("gray2.bmp");
//show all images
(src,gray1,gray2).display("RGB to Grayscale");
return 0;
}
|