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