PDA

View Full Version : leggere pixel di un'immagine in linguaggio C


pipe.net
19-01-2011, 21:34
Salve!
Avrei la necessità di creare urgentemente un sorgente in linguaggio C, capace di recuperare le informazioni di un'immagine raster il cui path è passato da linea di comando.
In pratica, dato un file RGB ad esempio di 10 x 10 pixel, dovrei contare quanti pixel neri ad esempio ci sono e quanti bianchi nella matrice risultante 10x10. Ho visto che ci sono delle librerie per il trattamento delle immagini come graphicsmagick. L'ho installata ma non riesco a comprenderne il funzionamento. Qualcuno potrebbe aiutarmi con un esempio per un'operazione così banale? Sorgenti C di esempio? Grazie!!
pipe

Tommo
20-01-2011, 00:12
Difficile dire che puoi fare se non sappiamo com'è che si rasterizza st'immagine :D

Se devi solo rasterizzare righe nere su sfondo bianco, direi che fai prima a fare tutto a mano con qualche algoritmo per rasterizzare linee (http://it.wikipedia.org/wiki/Algoritmo_della_linea_di_Bresenham).
Semplicemente crei un array in memoria e ci rasterizzi il path.
Poi accedere ai pixel è banale, dato che è un semplice array :read:

pipe.net
20-01-2011, 00:31
Non devo "rasterizzare linee". Devo prendere un'immagine come questa ad esempio:

http://img80.imageshack.us/img80/3641/10x10.png

e ricavare le coordinate dei punti neri: nell'esempio sono (1,3), (1,9) e (10,1).
Vorrei inoltre chiederti cosa centra la rasterizzazione visto che è un processo per convertire un'immagine vettoriale in raster. Qui l'immagine è già raster.

Z80Fan
22-01-2011, 18:41
Ciao.
Che formato è il file di input? E' un'immagine proprio raw dove ogni 3 pixel corrispondono ai valori RGB di 1 pixel, o è compressa/incapsulata in qualche formato?

Nel primo caso è semplice, basta che apri il file in modo binario e leggi 3 unsigned char alla volta che ti indicano il valore del pixel, partendo dall'angolo alto-sx.

Nel secondo è un poco più complesso, devi prima leggere l'header per capire da dove iniziano i dati, e poi leggere i dati sempre in modo binario in base a come vengono rappresentati in quel formato.