Do rysowania prostych figur przygotowano odpowiednie funkcje. Podobnie ma się rzecz z wyświetlaniem tekstu. Aby wyświetlić linię prostą skorzystamy z funkcji cvLine. Jako parametry przyjmuje ona wskaźnik na CvArr, dwa punkty oznaczające końce linii oraz kolor. Ponadto można ustawić kilka parametrów opcjonalnych pozwalających ustawić grubość linii czy sposób jej wyświetlania (np. z antyaliasingiem). Przy ustawionym ROI, linia zostanie wyświetlona tylko w jego obszarze.
Jak widać, jest ona podobna w nazewnictwie do innych funkcji tej biblioteki. Idąc dalej mamy możliwość umieszczania innych obiektów geometrycznych: prostokąta, elipsy itd. Przykładowy kod na końcu notki (aby lepiej zrozumieć działanie funkcji cvEllipse zachęcam do zapoznania się z tym obazkiem). Inne funkcje wysujące (np. wielokąty) działają podobnie, w razie potrzeby odsyłam, a jakże inaczej, do dokumentacji.
Pisanie jest czynnością podobną do rysowania, ale wcześniej należy zainicjować czcionkę.
a same napisy tworzymy funkcją cvPutText.
Poniżej kod na podsumowanie:
a tutaj zapisany obraz:

// tworzy linię o końcach [1,1] oraz [100,100], koloru białego, o grubości 3 pikseli cvLine(img,cvPoint(1,1),cvPoint(100,100),cvScalarAll(255.0),3);
Jak widać, jest ona podobna w nazewnictwie do innych funkcji tej biblioteki. Idąc dalej mamy możliwość umieszczania innych obiektów geometrycznych: prostokąta, elipsy itd. Przykładowy kod na końcu notki (aby lepiej zrozumieć działanie funkcji cvEllipse zachęcam do zapoznania się z tym obazkiem). Inne funkcje wysujące (np. wielokąty) działają podobnie, w razie potrzeby odsyłam, a jakże inaczej, do dokumentacji.
Pisanie jest czynnością podobną do rysowania, ale wcześniej należy zainicjować czcionkę.
// zainicjowanie czcionki CvFont font = cvFont(1.0,1); cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX,1.0,1.0);
a same napisy tworzymy funkcją cvPutText.
Poniżej kod na podsumowanie:
#include "cv.h" #include "cxcore.h" #include "cxtypes.h" #include "highgui.h" /* * Rysowanie i pisanie * autor: ratixu.blogspot.com */ int main(int argc, char** argv) { IplImage* img = cvCreateImage(cvSize(700, 700), IPL_DEPTH_32F, 3); // tworzenie linii o końcach w punktach [5,1] oraz [200,100] // o kolorze białym, grubości 5 pkseli z antyaliasingiem cvLine(img,cvPoint(5,1),cvPoint(200,100),cvScalarAll(255.0),5,CV_AA); // tworzenie prostokąta o przekątnej o końcach w punktach [5,110] // oraz [200,210] grubości 4 pksele cvRectangle(img,cvPoint(5,110),cvPoint(200, 210),cvScalar(122,121,43),4); // tworzenie elipsy - jedna z metod CvPoint srodek = cvPoint(200,350); CvSize osie = cvSize(200,100); double kat = 360.0; double katStartowy = 0.0; double katKoncowy = kat; CvScalar kolor = cvScalarAll(255.0); int grubosc = 5; cvEllipse(img,srodek,osie,kat,katStartowy,katKoncowy,kolor,grubosc); // tworzenie okręgu o promieniu 75 pikseli i środku w punkcie [200,600] // oraz grubości 5 pikseli cvCircle(img,cvPoint(200,600),75,cvScalarAll(255.0),5); // zainicjowanie czcionki: // skala rozciągnięcia, przyjumjąc 1 za 100% double skala = 2.0; // pochylenie czcionki, przyjmując 1.0 za 45 stopni double kursywa = 0.2; CvFont font = cvFont(skala,grubosc); // włączamy antyalliasing, CV_FONT_XXX to typy dostępnych czcionek cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX,skala,skala,kursywa,grubosc,CV_AA); //podpisujemy figury cvPutText(img,"Odcinek",cvPoint(300,100),&font,cvScalarAll(255.0)); cvPutText(img,"Prostokat",cvPoint(300,200),&font,cvScalarAll(255.0)); cvPutText(img,"Elipsa",cvPoint(450,350),&font,cvScalarAll(255.0)); cvPutText(img,"Okrag",cvPoint(300,650),&font,cvScalarAll(255.0)); cvNamedWindow("img",0); cvShowImage("img", img); while(true) { if(cvWaitKey(100) == 'k') break; } // zapisujemy wynik do pliku cvSaveImage("/home/lukasz/Desktop/rysowanie.png",img); cvDestroyWindow("img"); cvReleaseImage(&img); return (EXIT_SUCCESS); }
a tutaj zapisany obraz:

3 komentarze:
Witaj.
Dzięki za krótkie wprowadzenie do opencv.
Mam pytanie i je na domiar złego zadam,
Czy Pisałeś lub zamierzasz pisać w Python?
Pytanie jak pytanie, mogę odpowiedzieć :)
W Pythonie pisałem niewiele, na laborkach na studiach. W OpenCV pythona nie używałem. Ale język programowania zawszę traktuję tylko jako narzędzie, więc nie wykluczam używania pythona :)
Witam ;)
A jak ma się sprawa z polskimi znakami? Jak mogę wczytać inną czcionkę?
Pozdrawiam!
Prześlij komentarz