Korištenje OpenGL-a u obradi fotografija

poruka: 6
|
čitano: 1.690
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
neaktivan
offline
Korištenje OpenGL-a u obradi fotografija

Pozdrav svim forumašima...

Pošto nemam nekakvog iskustva sa korištenjem OpenGL-a, a na internetu nisam uspio pronaći odgovore na pitanja koja imam, odlučio sam da potražim odgovore ovdje. Moje pitanje je sledeće:

Da li je moguće u OpenGL-u dohvaćati ili mijenjati jedan piksel određenje fotografije (bitmap ili nekakvog drugog formata), i ako jeste na koji način...? Tj. da li je moguće napraviti Get i Set Pixel funkciju koja će koristiti grafički procesor...? 

 
0 0 hvala 0
14 godina
neaktivan
offline
Korištenje OpenGL-a u obradi fotografija

Možeš to i bez openGL-a.

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
Moj PC  
3 0 hvala 0
15 godina
neaktivan
offline
Re: Korištenje OpenGL-a u obradi fotografija
Boky Milanovic kaže...

Pošto nemam nekakvog iskustva sa korištenjem OpenGL-a, a na internetu nisam uspio pronaći odgovore na pitanja koja imam, odlučio sam da potražim odgovore ovdje. Moje pitanje je sledeće:

Da li je moguće u OpenGL-u dohvaćati ili mijenjati jedan piksel određenje fotografije (bitmap ili nekakvog drugog formata), i ako jeste na koji način...?

Moguće, ali bojim se ne previše brzo zbog potrebe za kopiranjem iz grafičke memorije u radnu memoriju i obratno. Što manje poziva to bolje, odnosno nemoj kopirati po jedan pixel svakim pozivom nego pokušaj slati cijele setove pixela po pozivu.

 

Teksture:

glBindTexture - bindanje teksture (tako određuješ s kojom teksturom kaniš raditi)

glGetTexImage - ovom funkcijom dobivaš pointer na memorijski blok koji sadrži pixele teksture

glTexSubImage2D - ovom funkcijom kopiraš svoje pixele u neku teksturu i tako mijenjaš pixele u teksturi

 

Framebuffer

glDrawPixels - za crtanje pixela direktno u framebuffer

glReadPixels - za dobivanje memorijskog bloka pixela iz framebuffera

 

Evo i još malo brljanja sa framebufferom:

http://stackoverflow.com/questions/7324208/opengl-framebuffer-can-clear-it-but-cant-draw-to-it

 

Nije mi jasno kako to nisi uspio pronaći? Doslovno samo googlaš opengl read pixel ili opengl draw pixel

 

:D

 

Boky Milanovic kaže...

Tj. da li je moguće napraviti Get i Set Pixel funkciju koja će koristiti grafički procesor...? 

Naravno da jest, to su ti pixel shaderi (odnosno fragment programi kako ih OpenGL naziva).

 

Kao što je tracer već napomenuo ne treba ti OpenGL za švrljanje po pixelima fotografija. Puno lakše, a vjerojatno i brže (osim ako nisi vješt sa pisanjem fragment programa), rješenje je jednostavno cijelu sliku držati u radnoj memoriji i pristupati pojedinim pixelima kao najobičnijim elementima polja. Tako nećeš imati ni overhead zbog poziva funkcija, niti overhead zbog prebacivanja podataka između radne i grafičke memorije.

0xBADC0DE
Poruka je uređivana zadnji put uto 19.3.2013 17:26 (rustweaver).
14 godina
neaktivan
offline
Korištenje OpenGL-a u obradi fotografija

U C++ Builderu se to može ovako:

 

HDC hdc = ::GetDC(Handle);
COLORREF pcolor = ::GetPixel(hdc, X, Y);  // X i Y su koordinate točke na fotografiji čiji RGB želimo

unsigned int r = GetRValue(pcolor);
unsigned int g = GetGValue(pcolor);
unsigned int b = GetBValue(pcolor);
ReleaseDC(0, hdc);

.. a kad imaš RGB radiš s njim kasnije što ti je volja.

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
Korištenje OpenGL-a u obradi fotografija

Kvalitetni odgovori decki, no mislim da mu ne treba generalni programski jezik za tu primjenu. MatLab, GNUOctave i ostali matematicki "jezici" su savrseno prilagodjeni radu s kernelima i konvolucijom.

 

U Octaveu (besplatan) bi npr. 5x horizontalni Gaussian blur bio:

img = image("test.jpg")
kernel = [1 4 7 4 1]
kernel = kernel ./ norm(kernel) // Ova funkcija je malo glupo nazvana, norm(x) zapravo vraca duzinu elementa
plot(image .* kernel)

 

 

Lay there, stare at the ceiling, and switch back to your time... Just go ahead, now try and taste it, I know it should be ripe...
Poruka je uređivana zadnji put uto 19.3.2013 18:19 (Deus ex machina).
 
2 0 hvala 1
14 godina
neaktivan
offline
Korištenje OpenGL-a u obradi fotografija

Hvala svima na odgovorima, mnogo ste mi pomogli, malo sam se više informisao o tehnologijama iskorištavanja GPU-a i tako pronašao OpenCL koji mi se čini kao dobro rješenje za moj problem.

 

Ja zapravo radim na aplikaciji praćenja pedmeta u realnom vremenu (putem video snimka). Tu postoje različiti izazovi a jedan od najvećih je brzina obrade informacija. Koliko sam uspio shvatiti u obradi fotografija GPU je puno brži od CPU-a, što bi mi omogućilo da razdvajanjem i podjelom zadataka između ova dva procesora postignem optimalne performanse. Treba napomenuti da rješenje treba omogućiti kasnije portanje na mobilne uređaje (sa Android i iOS operativnim sistemom). 

 
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice