Witam,
#include „cv.h”
#include „highgui.h”
#include stdio.h
CvCapture* vid = cvCreateCameraCapture(0);
cvNamedWindow("detekcja twarzy", CV_WINDOW_AUTOSIZE);
cvQueryFrame(vid);
double fps = 25;
int odstep_miedzy_klatkami = 1000 / fps;
// kolory do zaznaczania twarzy
static CvScalar kolory[] = {
{{19.0,69.0,139.0,0.0}},
{{63.0,133.0,205.0,0.0}},
{{96.0,164.0,244.0,0.0}},
};
// deklarujemy pamiec na obliczenia
CvMemStorage * storage = cvCreateMemStorage(0);
// tworzymy klasyfikator
// jako agrument musimy podac siezke do pliku z efektem treningu klasyfikatora
CvHaarClassifierCascade * haar = (CvHaarClassifierCascade*) cvLoad("/usr/local/share/opencv/haarcascades/haarcascade_frontalface_alt.xml");
while (true)
{
IplImage* ramka = cvQueryFrame(vid);
if (ramka == 0)
break;
// czyscimy bufor
cvClearMemStorage(storage);
// skala
double skala = 1.5;
// przygotowujemy obrazy posrednie
IplImage *temp = cvCreateImage(cvSize(ramka-width, ramka-height), 8, 1);
IplImage *temp2 = cvCreateImage(cvSize(cvRound(ramka-width / skala), cvRound(ramka-height / skala)), 8, 1);
// zamieniamy kolory na skale szarosci
cvConvertImage(ramka, temp, CV_BGR2GRAY);
// zmniejszamy czarno-bialy obraz
cvResize(temp, temp2, CV_INTER_LINEAR);
// szukamy twarzy w danej ramce
CvSeq *wynik = cvHaarDetectObjects(temp2, haar, storage, 1.1, 3, CV_HAAR_DO_CANNY_PRUNING, cvSize(30,30));
// iterujemy po wszystkich wynikach
for (int i = 0; i (wynik ? wynik-total : 0); i++)
{
// pobieramy prostokat z pozycja wskazujaca twarz
CvRect * twarz = (CvRect*) cvGetSeqElem(wynik, i);
// ustalamy dwa punkty po przekatnej prostokata
CvPoint punkt1 = cvPoint(cvRound(twarz-x * skala),cvRound(twarz-y * skala));
CvPoint punkt2 = cvPoint(cvRound((twarz-x + twarz-width)* skala),cvRound((twarz-y + twarz-height) * skala));
// rysujemy prostokat zaznaczajacy twarz na obrazie
cvRectangle(ramka,punkt1,punkt2,kolory[i%3],2);
}
cvShowImage("detekcja twarzy", ramka);
cvReleaseImage(temp);
cvReleaseImage(temp2);
int c = cvWaitKey(odstep_miedzy_klatkami);
if (c == 'k')
break;
}
cvReleaseHaarClassifierCascade(haar);
cvDestroyAllWindows();
cvReleaseCapture(vid);
niestety nie wiem czy nadaje się on do wykonania mojego zadania. Program napisany jest z wykorzystaniem biblioteki OpenCV. Czy program takiego typu najlepiej pisać w postaci konsolowej czy z wykorzystaniem interfejsu (np. Windows Form Application)? Jestem trochę początkujący w programowaniu dlatego proszę o pomoc.