2012-02-26 13 views
5

Sono completamente nuovo con OpenCV. Ho iniziato a leggere Learing OpenCV alcuni giorni fa e ora mi piacerebbe fare alcuni test.OpenCV - cvPutText aggiunge rumore alle mie immagini

Volevo programmare un conversatore di arte ASCII. Ho eseguito l'iterazione dell'immagine e raggruppato i pixel per quadrati per calcolare la luminosità di ogni regione per associarla a un rispettivo personaggio. Quindi ora ho bisogno di sapere quanto è brillante un personaggio per collegare ogni regione dell'immagine a un personaggio. La mia idea era di creare un altro programma che mi desse la luminosità di alcuni personaggi. L'approccio è il seguente:

  • creare un'immagine di dimensioni 100 * 100 (per esempio) - sfondo nero e 1 canale
  • disegnare il personaggio da qualche parte in esso di colore bianco (cvPutText)
  • Itera la immagini e contare il numero di pixel bianchi
  • normalizzare il risultato

Penso che il mio programma è ok, ma sto ottenendo risultati strani ... solo per verificare, io sono la visualizzazione delle immagini con ogni carattere e somethi ng strano sta succedendo. L'immagine mostra di cosa sto parlando.

cvPutText() result

Questo è il codice che sto usando:

... 
char c = 'a'; //or whatever 
IplImage *img = cvCreateImage(cvSize(150, 150), IPL_DEPTH_8U, 1); 

char buffer[7]; 
sprintf(buffer, "%c", c); 

CvFont font; 
cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5); 
cvPutText(img, buffer, cvPoint(2, 15), &font, cvScalar(255)); 

//iteration to calculate brightness will go here 

cvNamedWindow(buffer); 
cvShowImage(buffer, img); 
cvMoveWindow(buffer, 50*(c-first), 20); 
... 

sto sviluppando su MacOS Lion (se aiuta ...). Grazie per aver letto (e aiutato!).

+0

Sto usando OpenCV 2.4 su Ubuntu 12.04. Ho provato il tuo snippet di codice, ma non ho visto il problema nel visualizzare l'immagine con il personaggio. Mi chiedo se fai qualche manipolazione di immagini dopo cvPutText()? – zkan

+2

Penso che cvCreateImage non inizializzi l'immagine, hai provato cvSet (img, cvScalar (0,0,0)); ? – Milo

+0

Grazie per il vostro aiuto. Non sto più usando OpenCV, ma spero di avere un giorno di tempo per continuare a sperimentare. –

risposta

1

Non hai inizializzato il contenuto dell'immagine: hai appena allocato la memoria e vedi una sorta di immondizia di memoria.

Basta aggiungere cvSet (img, cvScalarAll (0)) per impostare l'immagine in nero.

+0

Grazie anche per il vostro aiuto. Non riuscirò a testare la soluzione da un po 'di tempo, ma quello che dici (e lo ha detto Milo un mese fa) ha senso. Quindi approvo la tua risposta. –

+0

Ho finalmente ripreso questo progetto. Ho finito una prima versione molto semplice di questo. La tua soluzione è stata fantastica! Grazie (e anche @Milo!) Se siete curiosi dei risultati, li ho caricati nella mia pagina github: https://github.com/ricardperez/ASCIIArt –

Problemi correlati