#include #include #include #include #include #define LIMITE_TREINO 100 // numero de frames limite para o treinamento #define TAM_VETOR_CORES 15 // tamanho do vetor de cores int threshold = 60; // limiar para a detecção de movimento do vídeo int main() { int i,j,cont,qtdeContours; int width, height; bool treinando = true; CvScalar pixel, vetorColor[TAM_VETOR_CORES]; CvMemStorage* storage = cvCreateMemStorage(0); CvSeq* first_contour = 0; float **mediaBlue, **mediaGreen, **mediaRed; char nome[30]; FILE *arquivo; IplImage* img_color; IplImage* frame = 0; IplImage* frame_aux = 0; IplImage* img_aux; CvCapture* capture = 0; // lê o arquivo com as informações do vídeo de entrada arquivo = fopen("inicio.txt","r"); fscanf(arquivo,"%s",&nome); fscanf(arquivo,"%d",&width); fscanf(arquivo,"%d",&height); fclose(arquivo); // inicializa um vetor de cores for(i=0; i threshold) || (abs(pixel.val[1]-mediaGreen[i][j]) > threshold) || (abs(pixel.val[2]-mediaRed[i][j]) > threshold)) { pixel.val[0] = 255; pixel.val[1] = 255; pixel.val[2] = 255; cvSet2D(img_color,height-1-i,j,pixel); cvSet2D(img_aux,height-1-i,j,pixel); } else { pixel.val[0] = 0; pixel.val[1] = 0; pixel.val[2] = 0; cvSet2D(img_color,height-1-i,j,pixel); cvSet2D(img_aux,height-1-i,j,pixel); } } } // encontra os contornos ativos e marca com cores diferentes cvDilate(img_aux, img_aux); cvDilate(img_aux, img_aux); cvDilate(img_aux, img_aux); cvDilate(img_color, img_color); // desenha os contornos ativos cvFindContours(img_aux, storage, &first_contour, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE); int k = 0; for( ; first_contour != 0; first_contour = first_contour->h_next ) { if (fabs(cvContourArea(first_contour)) > 40) // { cvDrawContours(img_color, first_contour, vetorColor[k], CV_RGB(255,255,255), 0, 0, 8 ); k++; } if (k == TAM_VETOR_CORES) break; } // mostra a imagem original e o resultado da segmentação cvShowImage("camera_original_wnd", frame ); cvShowImage( "camera_editada_wnd", img_color); } if(cvWaitKey(20) >= 0) break; } /* Desalocar imagens */ cvReleaseImage(&img_color); cvReleaseImage(&img_aux); cvReleaseCapture(&capture); for(i=0; i