2012-02-26 12 views
5

Jestem całkowicie nowy z OpenCV. Kilka dni temu zacząłem czytać Learing OpenCV, a teraz chciałbym zrobić kilka testów.OpenCV - cvPutText dodaje szum do moich obrazów

Chciałem zaprogramować konwersator sztuki ASCII. Wykonałem iterację obrazu i pogrupowałem piksele za pomocą kwadratów, aby obliczyć jasność każdego regionu, aby powiązać go z odpowiednią postacią. Więc teraz muszę wiedzieć, jak jasna jest postać, aby połączyć każdy region obrazu z postacią. Mój pomysł polegał na stworzeniu innego programu, który zapewni mi jasność niektórych postaci. Podejście to w następujący sposób:

  • Utwórz obraz o rozmiarze 100 x 100 (na przykład) - czarnym tle i 1 kanał
  • narysować postać gdzieś w nim w kolorze białym (cvPutText)
  • iteracyjne obraz i policzyć liczbę białych pikseli
  • znormalizować wynik

myślę, że mój program jest ok, ale ja dostaję dziwne wyniki ... Żeby to sprawdzić, ja wyświetlania obrazów z każdego charakter i coś dzieje się dziwne. Obraz pokazuje, o czym mówię.

cvPutText() result

Jest to kod używam:

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

Zajmuję na MacOS Lion (czy to pomaga ...). Dziękuję za przeczytanie (i pomoc!).

+0

Używam OpenCV 2.4 na Ubuntu 12.04. Wypróbowałem Twój fragment kodu, ale nie widziałem problemu z wyświetleniem obrazu z postacią. Zastanawiam się tylko, czy wykonujesz jakąkolwiek manipulację obrazem po cvPutText()? – zkan

+2

Myślę, że cvCreateImage nie inicjalizuje obrazu, czy próbowałeś cvSet (img, cvScalar (0,0,0)); ? – Milo

+0

Dzięki za pomoc. Nie używam już OpenCV, ale mam nadzieję, że pewnego dnia będę miał czas na eksperymentowanie z tym. –

Odpowiedz

1

Nie zainicjalizowałeś zawartości obrazu: właśnie przydzieliłeś pamięć i widzisz jakieś śmieci pamięci.

Wystarczy dodać cvSet (img, cvScalarAll (0)), aby ustawić obraz na czarny.

+0

Dziękuję również za pomoc. Nie będę w stanie przetestować rozwiązania od jakiegoś czasu, ale to, co mówisz (i zostało to powiedziane przez Milo miesiąc temu) ma sens. Więc zatwierdzam twoją odpowiedź. –

+0

W końcu odzyskałem ten projekt. Skończyłem bardzo prostą pierwszą wersję tego. Twoje rozwiązanie było świetne! Dziękuję (i @Milo też!) Jeśli jesteś ciekawy wyników, przesłałem je na moją stronę github: https://github.com/ricardperez/ASCIIArt –

Powiązane problemy