PRZETWARZANIE OBRAZÓW : Techniki programowania przy użyciu biblioteki CImg I.

1.

Przeanalizuj działanie poniższych programów: 1.

Środowisko programistyczne

a. Dev-C++:

http://www.bloodshed.net/devcpp.html

Wydruk 1. Rozmycie obrazu

b. Microsoft Visual C++ Express: http://www.microsoft.com/visualstudio/eng/

c. CImg:

http://cimg.sourceforge.net/

i.

(wersja 1.2.7 dla Dev C++

#include "CImg.h"

ii.

wersja najnowsza dla Visual C++

using namespace cimg_library;

d. ImageMagick: http://www.imagemagick.org/script/index.php int main()

{

2.

Konfiguracja projektu w środowisku DevC++

CImg< unsigned char> image("lena.pgm"); a. Utworzenie pustego projektu 'Empty Project'

image.display("Oryginał");

b. Dołączenie biblioteki ‘libgdi32.a’ (biblioteka pakietu Dev-C++): image.blur(2.5);

'Projekt->Opcje Projektu->Parametry->Konsolidator image.display("Rozmyty"); // UWAGA: Obraz jest normalizowany

->Dodaj Plik'

c. Wskazanie lokalizacji pliku ‘CImg.h’ jako katalogu plików nagłówkowych: return 0;

}

'Projekt->Opcje Projektu-> Pliki/Katalogi

-> Katalogi Plików Nagłówkowych'

Wydruk 2. Rozmycie obrazu

3.

Konfiguracja projektu w środowisku Visual C++ 2012 Express a. Utworzenie projektu typu: 'Win32 Console Application'

i.

W okienku 'Win32 Application Wizard' wybranie zakładki

#include "CImg.h"

'Application Settings'

using namespace cimg_library;

ii.

W sekcji 'Application type' należy wybrać

int main()

'Console Application'

{

iii.

W sekcji 'Additional options' należy wybrać

CImg< unsigned char> image("lena.pgm");

'Empty project'

CImgDisplay original_disp(image,"Oryginał"); b. Wskazanie lokalizacji pliku ‘CImg.h’ jako katalogu plików nagłówkowych: image.blur(2.5);

'Project->Properties ...->Configuration Properties

->VC++ Directories->Include Directories'

CImgDisplay transformed_disp(image,"Rozmyty",3); c. Dodawanie plików do projektu: Project->Add New Item ...

while (!original_disp.is_closed || !transformed_disp.is_closed)

-> C++ File (.cpp)

{}

d. Kompilacja: 'Build/Build Solution (F7)'

return 0;

e. Uruchamianie: 'Debug/Start Without Debugging (Crtl-F5)'

}

© P.Ślusarczyk

Strona 1 z 3

PRZETWARZANIE OBRAZÓW : Techniki programowania przy użyciu biblioteki CImg I.

Wydruk 4a. (Odbicie lustrzane obrazu - dla wersji 1.2.7. + Dev C++) Wydruk 3a. (Negatyw obrazu monochromatycznego - dla wersji 1.2.7. + Dev C++)

#include "CImg.h"

#include "CImg.h"

using namespace cimg_library;

using namespace cimg_library;

int main()

int main()

{

{

CImg< unsigned char> image("lena.pgm"); CImg< unsigned char> image("lena.pgm"); CImgDisplay orginal_disp(image,"Oryginał");

// image(i,j) gdzie: i - numer kolumny

for(unsigned int i=0; i<image.dimx()/2; i++)

//

j - numer wiersza

for(unsigned int j=0; j<image.dimy(); j++){

unsigned char temp = image(i,j);

for(unsigned int i=0; i<image.dimx(); i++) image(i,j) = image(image.dimx()-i,j);

for(unsigned int j=0; j<image.dimy(); j++) image(image.dimx()-i,j) = temp;

image(i,j)=255-image(i,j);

}

CImgDisplay im_display(image,"Negatyw",3); CImgDisplay transf_disp(image,"Odbicie lustrzane",3); while (!im_display.is_closed())

while (!orginal_disp.is_closed || !transf_disp.is_closed)

{}

{}

return 0;

return 0;

}

}

Wydruk 3a. (Negatyw obrazu monochromatycznego - dla wersji 1.4.9 + Visual C++) Wydruk 4b. (Odbicie lustrzane obrazu - dla wersji 1.4.9 + Visual C++)

#include "CImg.h"

#include "CImg.h"

using namespace cimg_library;

using namespace cimg_library;

int main()

int main()

{

{

CImg<unsigned char> image("lena.pgm"); CImg<unsigned char> image("lena.pgm"); CImgDisplay orginal_disp(image,"Oryginał");

// image(i,j) gdzie:

// i - numer kolumny

for(int i=0; i<image.width()/2; i++)

// j - numer wiersza

for(int j=0; j<image.height(); j++){

unsigned char temp = image(i,j);

for(int i=0; i<image.width(); i++)

image(i,j) = image(image.width()-i,j);

for(int j=0; j<image.height(); j++)

image(image.width()-i,j) = temp;

image(i,j)=255-image(i,j);

}

CImgDisplay im_display(image,"Negatyw",3); CImgDisplay transf_disp(image,"Odbicie lustrzane",3); while (!im_display.is_closed())

while (!orginal_disp.is_closed() || !transf_disp.is_closed())

{}

{}

return 0;

return 0;

}

}

© P.Ślusarczyk

Strona 2 z 3

PRZETWARZANIE OBRAZÓW : Techniki programowania przy użyciu biblioteki CImg I.

Wydruk 5a. (Gradient - dla wersji 1.2.7. + Dev C++ ) 2.

Wyreguluj ustawienia obrazu monitora wykorzystując program z wydruku 5.

3.

Napisz programu generujący obraz złożony z 8,16 lub 32 pionowych pasów

#include "CImg.h"

o zwiększających się poziomach jasności od 0 do 255 (pasma Macha).

using namespace cimg_library;

4.

Napisz program prezentujący zjawisko jednoczesnego kontrastu.

int main()

{

CImg< unsigned char> obraz(256,256,1); // monochromatyczny for(unsigned int i=0; i<obraz.dimx(); i++) for(unsigned int j=0; j<obraz.dimy(); j++) obraz(i,j) = i;

CImgDisplay im_display(obraz,"Gradient",3); while (!im_display.is_closed())

{}

return 0;

}

Wydruk 5b. (Gradient - dla wersji 1.4.9 + Visual C++))

#include "CImg.h"

using namespace cimg_library;

int main()

{

CImg<unsigned char> obraz(256,256,1); // monochromatyczny for(int i=0; i<obraz.width(); i++)

for(int j=0; j<obraz.height(); j++)

obraz(i,j) = i;

CImgDisplay im_display(obraz,"Gradient",3); while (!im_display.is_closed())

{}

return 0;

}

© P.Ślusarczyk

Strona 3 z 3