2012-02-26 17 views
5

Soy completamente nuevo con OpenCV. Empecé a leer Learing OpenCV hace unos días y ahora me gustaría hacer algunas pruebas.OpenCV - cvPutText agrega ruido a mis imágenes

Quería programar un conversor artístico de ASCII. He hecho la iteración de la imagen y he agrupado píxeles por cuadrados para calcular el brillo de cada región para asociarla a un personaje respectivo. Así que ahora necesito saber qué tan brillante es un personaje para vincular cada región de imagen a un personaje. Mi idea era hacer otro programa que me diera el brillo de algunos personajes. El enfoque es el siguiente:

  • crear una imagen de tamaño 100 * 100 (por ejemplo) - fondo negro y 1 canal
  • Dibuje el carácter en algún lugar en el color blanco (cvPutText)
  • Iterar el imagen y contar el número de píxeles blancos
  • normalizar el resultado

creo que mi programa no está mal, pero estoy consiguiendo resultados extraños ... sólo para verlo, estoy mostrando las imágenes con cada uno personaje y somethi ng extraño está sucediendo. La imagen muestra de lo que estoy hablando.

cvPutText() result

Este es el código que estoy utilizando:

... 
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); 
... 

estoy desarrollando en MacOS León (si ayuda ...). Gracias por leer (y ayudar!).

+0

Estoy usando OpenCV 2.4 en Ubuntu 12.04. Probé el fragmento de código, pero no vi el problema al mostrar la imagen con el personaje. ¿Te preguntas si haces alguna manipulación de imagen después de cvPutText()? – zkan

+2

Creo que cvCreateImage no inicializa la imagen, ¿has probado cvSet (img, cvScalar (0,0,0)); ? – Milo

+0

Gracias por su ayuda. No estoy usando OpenCV por más tiempo, pero espero tener tiempo algún día para seguir experimentando con esto. –

Respuesta

1

No inicializó el contenido de la imagen: acaba de asignar la memoria y ve algún tipo de basura en la memoria.

Simplemente agregue cvSet (img, cvScalarAll (0)) para establecer su imagen en negro.

+0

Gracias por su ayuda también. No podré probar la solución por un tiempo, pero lo que dices (y lo dijo Milo hace un mes también) tiene sentido. Entonces apruebo tu respuesta. –

+0

Finalmente he retomado este proyecto. He terminado una primera versión muy simple de esto. ¡Tu solución fue genial! Gracias (y @Milo también!) Si tiene curiosidad acerca de los resultados, los he subido a mi página de github: https://github.com/ricardperez/ASCIIArt –

Cuestiones relacionadas