poniedziałek, 21 września 2009

Podstawowe klasy w OpenCV


Ostatnio wspomniałem o nowym interfejsie w OpenCV, a dzisiaj przedstawię jego podstawowe klasy. Przede wszystkim nie będzie już struktur CvArr, CvMat i IplImage - wszystkie one zastąpione zostają klasą Mat. Tak jak reszta klas i funkcji, znajduje się ona w przestrzeni nazw cv. Nie chcę tutaj przepisywać dokumentacji, więc zademonstruję tylko na przykładzie "szumu" z telewizora ;-) Kod źródłowy (na githubie) oraz efekt:

Na początku zaznaczamy użycie przestrzeni nazw cv. Spowodowało to zniknięcie prefiksu "cv" z nazw funkcji. I tak nie ma już cvNamedWindow ale namedWindow. Parametry są niemal identyczne (jedyna zmiana w tej i podobnych funkcjach to użycie obiektu string zamiast wskaźnika char*). Dalej mamy obiekt klasy Mat. Posiada on wiele konstruktorów. W przykładowym kodzie pokazano tworzenie macierzy liczb typu double. Analogicznie można stworzyć np. macierz wartości boolowskich podając DataType< bool>::type itd. Można także deklarować według starego typu podając jako parametr np.CV_32F. Przykładowo, tak stworzymy obraz RGB o rozdzielczości 640x480:

Mat obr(640,480,CV_8UC3);

lub z wykorzystaniem Size:

Mat obr(Size(640,480),CV_8UC3);

Dalej mamy odpowiednik starego CvScalar czyli klasę Scalar. Obiekty tej klasy można zadeklarować tak jak w przykładowym kodzie Scalar_<typ>, lub z użyciem funkcji np.

Scalar scl = Scalar::all(0);

Kolejna funkcja to randu która zapełnia macierz wartościami losowymi z zakresu [0:1]. Ostatnia nowość to funkcja imshow - odpowiednik cvShowImage. I na koniec zauważyć można brak cvRelease :). Wszystkie klasy mają odpowiednio zaimplementowane destruktory, więc program sprząta po sobie sam :)

5 komentarzy:

airborn pisze...

trzeba rozważyć migrację do nowej wersji... gdyby mi się tylko chciało...

Łukasz pisze...

U mnie to także główny problem...

Łukasz pisze...

Obecnie używanie nowej wersji nie ma sensu. Ja się na to porwałem i szybko wróciłem do starej. Wiele funkcji w C++ ma błędy i nie działają poprawnie (a odpowiedniki w C jak najbardziej).

Joe Pedestrian pisze...

Hej,
Wiesz może czy jest gdzieś w miarę kompletny opis API dla wersji 2.1?

Joe Pedestrian pisze...

http://opencv.willowgarage.com/documentation/cpp/index.html