-
Notifications
You must be signed in to change notification settings - Fork 0
/
DisplayImage.cpp
125 lines (104 loc) · 2.65 KB
/
DisplayImage.cpp
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
using namespace cv;
#define N 512
/// Global variables
int threshold_value = 0;
int const max_value = 255;
Mat src, src_gray, dst;
char* window_name = "Threshold Demo";
unsigned char logo_buffer[N];
char* trackbar_value = "Value";
/// Function headers
void Threshold_Demo( int, void* );
void myWaitKey()
{
while(true)
{
int c;
c = waitKey( 20 );
if( (char)c == 27 )
{ break; }
}
}
/**
* @function main
*/
int main( int argc, char** argv )
{
if(4 != argc)
{
printf("Wrong arguments\n");
return EXIT_FAILURE;
}
/// Load an image
src = imread( argv[1], 1 );
/// Convert the image to Gray
cvtColor( src, src_gray, CV_RGB2GRAY );
/// Create a window to display results
namedWindow( window_name, CV_WINDOW_AUTOSIZE );
createTrackbar( trackbar_value,
window_name, &threshold_value,
max_value, Threshold_Demo );
/// Call the function to initialize
Threshold_Demo( 0, (void *)argv );
/// Wait until user finishes program
myWaitKey();
}
/**
* @function Threshold_Demo
*/
void Threshold_Demo( int, void* arguments)
{
Mat dst = src_gray.clone(); // (src_gray.cols, src_gray.rows, DataType<char>::type);
int x_shift = 222; //Lena's eyes coordinates
int y_shift = x_shift;
for (int i = 0 ; i < dst.rows; i ++)
for (int j = 0; j < dst.cols; j ++)
{
if( (*(dst.ptr<char>(i) + j)) < 69)
{
*(dst.ptr<char>(i) + j) = 0;
}
else
{
*(dst.ptr<char>(i) + j) = 255;
}
if((i < x_shift || i >= x_shift + 32) || (j < y_shift || j >= y_shift + 128))
{
*(dst.ptr<char>(i) + j) = 0;
}
}
// threshold( src_gray, dst, threshold_value, 255, 0);
imshow( window_name, src);
myWaitKey();
char** argv = (char **)arguments;
FILE* display = fopen(argv[2], "r");
fread(logo_buffer, sizeof(char), N, display);
FILE* lena_display = fopen(argv[3], "w");
for(int j = y_shift + 127; j >= y_shift; j--)
{
for(int k = 0; k < 4; k++)
{
unsigned char byte = logo_buffer[128 * k - j + 127 + y_shift];
unsigned char new_byte = 0;
for(int i = 0; i < 8; i++)
{
unsigned char temp = (byte & 1) * 255;
unsigned char pixel = ((*(dst.ptr<char>(8 * k + i + x_shift) + j) + 256) % 256) / 255;
*(dst.ptr<char>(8 * k + i + x_shift) + j) = temp;
pixel = pixel << i;
new_byte = new_byte | pixel;
byte = byte >> 1;
}
logo_buffer[128 * k - j + 127 + y_shift] = new_byte;
}
}
fwrite(logo_buffer, sizeof(char), N, lena_display);
imshow( window_name, dst );
fclose(display);
fclose(lena_display);
}