int main() { // Image & hsvImage //IplImage *hsv; // Video Capture CvCapture *capture; // Key for keyboard event char key; // Number of tracked pixels int nbPixels; // Next position of the object we overlay CvPoint objectNextPos; // Initialize the video Capture (200 => CV_CAP_V4L2) capture = cvCreateCameraCapture(200); // Check if the capture is ok if (!capture) { printf("Can't initialize the video capture.\n"); return -1; } // Create the windows cvNamedWindow("Test Color Tracking", CV_WINDOW_AUTOSIZE); cvNamedWindow("Test Mask", CV_WINDOW_AUTOSIZE); cvMoveWindow("Test Color Tracking", 0, 100); cvMoveWindow("Test Mask", 650, 100); // Mouse event to select the tracked color on the original image cvSetMouseCallback("Test Color Tracking", getObjectColor); // While we don't want to quit while(key != 'Q' && key != 'q') { // We get the current image image = cvQueryFrame(capture); // If there is no image, we exit the loop if(!image) continue; objectNextPos = binarisation(image, &nbPixels); addObjectToVideo(image, objectNextPos, nbPixels); // We wait 10 ms key = cvWaitKey(10); } // Destroy the windows we have created cvDestroyWindow("Test Color Tracking"); cvDestroyWindow("Test Mask"); // Destroy the capture cvReleaseCapture(&capture); return 0; }
void Calibration::slotSliderSettings(int value) { // Modification de la valeur affichée labelSlider->setText(tr("Seuil : ") + QString::number(value)); // Appel de la fonction pour la nouvelle image curseur->threshold = value; binarisation(imageCapturee,curseur); // Modification de l'image affichée imageSettings->setPixmap(QPixmap::fromImage(iplToQimage(curseur->mask))); }
main () { int i,j,k; for (i=0; i < PICTURE_VERTICAL_SIZE; i++) { for (j=PICTURE_HORIZONTAL_OFFSET; j < PICTURE_HORIZONTAL_SIZE+PICTURE_HORIZONTAL_OFFSET; j++) { image_original[i][j-PICTURE_HORIZONTAL_OFFSET] = Y_test[i][j]; } } for (i=0; i < PICTURE_VERTICAL_SIZE; i++) { for (j=PICTURE_HORIZONTAL_OFFSET; j < PICTURE_HORIZONTAL_SIZE+PICTURE_HORIZONTAL_OFFSET; j++) { image_test[i][j-PICTURE_HORIZONTAL_OFFSET] = Y_test[i][j]; } } for (i=0; i < PICTURE_VERTICAL_SIZE; i++) { for (j=PICTURE_HORIZONTAL_OFFSET; j < PICTURE_HORIZONTAL_SIZE+PICTURE_HORIZONTAL_OFFSET; j++) { image_back[i][j-PICTURE_HORIZONTAL_OFFSET] = Y_back[i][j]; } } printf("Starting Motion Detection Application: \n\n"); printf("__attribute__((section(\".heapl2ram\"))) pixel Y_back[%d][%d] = \n{\n",PICTURE_VERTICAL_SIZE,PICTURE_HORIZONTAL_SIZE); print_image_vect((pixel*)image_back); printf("};\n"); printf("__attribute__((section(\".heapl2ram\"))) pixel Y_test[%d][%d] = \n{\n",PICTURE_VERTICAL_SIZE,PICTURE_HORIZONTAL_SIZE); print_image_vect((pixel*)image_test); printf("};\n"); printf("Subtraction and binarization treshold \n\n"); sub_image((pixel*)image_test, (pixel*)image_back); print_image((pixel*)image_test); max_pixel= max_image((pixel*)image_test); printf("Max pixel = %d \n\n",max_pixel); printf("Binarization \n\n"); binarisation((pixel*)image_test, (int)max_pixel*3/10,1,0); print_image((pixel*)image_test); printf("Erosion \n\n"); erosion((pixel*)image_test,KERNEL_SIZE,(pixel*)image_back); print_image((pixel*)image_back); printf("Dilatation \n\n"); dilatation((pixel*)image_back,KERNEL_SIZE ,(pixel*)image_test_out); print_image((pixel*)image_test_out); printf("Sobel Horizontal \n\n"); convolution_rect((pixel*)image_test_out, KERNEL_SIZE, sobel1,(pixel*)image_test); val_abs((pixel*)image_test); print_image((pixel*)image_test); printf("Sobel Vertical \n\n"); convolution_rect( (pixel*)image_test_out, KERNEL_SIZE, sobel2,(pixel*)image_back); val_abs((pixel*)image_back); print_image((pixel*)image_back); printf("Final Sum \n\n"); sum_image((pixel*)image_test, (pixel*)image_back); binarisation((pixel*)image_test, 1,0,1); print_image((pixel*)image_test); printf("Final Multiplication \n\n"); multiply((pixel*)image_test, (pixel*)image_original); printf("__attribute__((section(\".heapl2ram\"))) pixel Y_golden[%d][%d] = \n{\n",PICTURE_VERTICAL_SIZE,PICTURE_HORIZONTAL_SIZE); print_image_vect((pixel*)image_test); printf("};\n\n"); printf("Motion Detection Application Completed\n"); }
/** Fonction principale de traitement */ void modeStationnaire() { // Declaration //Fps timeCounter; int on = 1; pthread_t grabF; pthread_t grabB; int id_from, id_msg, ordre = 100; cvNamedWindow("T",CV_WINDOW_AUTOSIZE); std::cerr << std::endl << std::endl; // Lancement des threads if(captureCameraF!=NULL){ pthread_create ( &grabF, NULL, grabCamF, NULL ); } if(captureCameraB!=NULL){ pthread_create ( &grabB, NULL, grabCamB, NULL ); } string s; // Boucle principale while(on){ cin >> s; parse(s,&id_from, &id_msg, &ordre); cout << -1 << '.' << id_msg << '.'; //cout << id_from << id_msg << ordre; //scanf("%d.%d.%d",&id_from, &id_msg, &ordre); //fflush(stdin); //printf("-1.%d.[]",id_msg); // ***** switch(ordre){ // --- Identification --- case 0:{ cout << 1 << '.' << "cam"; break;} // --- Ping --- case 1:{ cout << "Pong"; break;} // --- ScanAvant --- case 64:{ pthread_mutex_lock (& mu); imgBas=cvQueryFrame(captureCameraF); pthread_mutex_unlock (& mu); listFinal->iniPtr(); while(listFinal->getEle()!=NULL){ listFinal->getEle()->color=5; listFinal->ptrSuiv(); } binarisation(); regionGrowing(); listFinal = analyseListeRegion(listBeforeTrait, IMG_WIDTH, IMG_HEIGHT); sendData(listFinal); //afficheListeRegion(listFinal, imgBas); //cvShowImage("T",imgBas); cvWaitKey(10); break;} // --- ScanArriére --- case 65:{ pthread_mutex_lock (& mu); imgBas=cvQueryFrame(captureCameraB); pthread_mutex_unlock (& mu); listFinal->iniPtr(); while(listFinal->getEle()!=NULL){ listFinal->getEle()->color=5; listFinal->ptrSuiv(); } binarisation(); regionGrowing(); listFinal = analyseListeRegion(listBeforeTrait, IMG_WIDTH, IMG_HEIGHT); sendData(listFinal); //afficheListeRegion(listFinal, imgBas); //cvShowImage("T",imgBas); cvWaitKey(10); break;} #define SXL 20 case 62:{ for(int tmp=0; tmp<5; tmp++) { pthread_mutex_lock (& mu); imgBas=cvQueryFrame(captureCameraF); pthread_mutex_unlock (& mu); binarisation(); regionGrowing(); if(tmp==0){ listFinal = analyseListeRegion(listBeforeTrait, IMG_WIDTH, IMG_HEIGHT); listFinal->iniPtr(); while(listFinal->getEle()!=NULL){ listFinal->getEle()->color=0; listFinal->ptrSuiv(); } }else{ listTmp = analyseListeRegion(listBeforeTrait, IMG_WIDTH, IMG_HEIGHT); listFinal->iniPtr(); while(listFinal->getEle()!=NULL){ listTmp->iniPtr(); while(listTmp->getEle()!=NULL){ if ( listTmp->getEle()->Xprime - SXL < listFinal->getEle()->Xprime && listTmp->getEle()->Xprime + SXL > listFinal->getEle()->Xprime && listTmp->getEle()->Yprime - SXL < listFinal->getEle()->Yprime && listTmp->getEle()->Yprime + SXL > listFinal->getEle()->Yprime ) { listFinal->getEle()->color++; } listTmp->ptrSuiv(); } listFinal->ptrSuiv(); } } } sendData(listFinal); break;} case 63:{ for(int tmp=0; tmp<5; tmp++) { pthread_mutex_lock (& mu); imgBas=cvQueryFrame(captureCameraB); pthread_mutex_unlock (& mu); binarisation(); regionGrowing(); if(tmp==0){ listFinal = analyseListeRegion(listBeforeTrait, IMG_WIDTH, IMG_HEIGHT); listFinal->iniPtr(); while(listFinal->getEle()!=NULL){ listFinal->getEle()->color=0; listFinal->ptrSuiv(); } }else{ listTmp = analyseListeRegion(listBeforeTrait, IMG_WIDTH, IMG_HEIGHT); listFinal->iniPtr(); while(listFinal->getEle()!=NULL){ listTmp->iniPtr(); while(listTmp->getEle()!=NULL){ if ( listTmp->getEle()->Xprime - SXL < listFinal->getEle()->Xprime && listTmp->getEle()->Xprime + SXL > listFinal->getEle()->Xprime && listTmp->getEle()->Yprime - SXL < listFinal->getEle()->Yprime && listTmp->getEle()->Yprime + SXL > listFinal->getEle()->Yprime ) { listFinal->getEle()->color++; } listTmp->ptrSuiv(); } listFinal->ptrSuiv(); } } } sendData(listFinal); break;} // --- Arrét du programme --- case -1:{ on = 0; break;} case 69:{ on = 0; break;} } // ***** cout << endl; fflush(stdout); } }
int main(int argc, char const *argv[]) { //Pour effacer l'ecran effacer_ecran(); ligne_separation('='); char nomImage[255] = ""; char transformation[255] = ""; // On ouvre le fichier de l'image FILE* file_image = ouverture_lecture_fichier_image(&argc,argv,nomImage,transformation); if(file_image == NULL) return 1; IMAGE tab_pixels; if(lecture_fichier(file_image, &tab_pixels, nomImage)){ printf("\tNombre de Colonnes:\t%d\n\tNombre de Lignes:\t%d\n\tValeur Maximal:\t\t%d\n",tab_pixels.nb_col,tab_pixels.nb_lig,tab_pixels.max_val); printf("[O]\tLecture complete du fichier image reussie\n"); } else{ printf("[X]\tProbleme de lecture du fichier image\n"); return 1; } file_image = NULL; // ########################################### // Travail des fonctions des transformations // ########################################### // Raccourcis pour que l'utilisateur rentre la transformation lors de l'execution en ligne de commande int transfoOk = 1; if(strcmp(transformation, "niveauGris") == 0) niveauGris(&tab_pixels); else if(strcmp(transformation, "binarisation") == 0) binarisation(&tab_pixels); else if(strcmp(transformation, "symetrieH") == 0) symetrie_horizontale(&tab_pixels); else if(strcmp(transformation, "symetrieV") == 0) symetrie_verticale(&tab_pixels); else if(strcmp(transformation, "negatif") == 0) negatif(&tab_pixels); else if(strcmp(transformation, "redimensionnement") == 0) redimensionnement(&tab_pixels, argc, argv); else if(strcmp(transformation, "ameliorationContraste") == 0) amelioration_du_contraste(&tab_pixels); else if(strcmp(transformation, "lissage") == 0) lissage(&tab_pixels); else if(strcmp(transformation, "laplacien") == 0) laplacien(&tab_pixels); else if(strcmp(transformation, "gradientSimple") == 0) gradient(&tab_pixels, transformation); else if(strcmp(transformation, "gradientSobel") == 0) gradient(&tab_pixels, transformation); else if(strcmp(transformation, "detectionContoursSobel") == 0) detectionContoursSobel(&tab_pixels); else if(strcmp(transformation, "detectionContoursLaplacien") == 0) detectionContoursLaplacien(&tab_pixels); else if(strcmp(transformation, "reductionBruit") == 0) reductionBruit(&tab_pixels); else if(strcmp(transformation, "masqueCustom") == 0) masqueCustom(&tab_pixels, argc, argv); else if(strcmp(transformation, "base") != 0){ printf("[X]\tTransformation inexistante\n"); transfoOk = 0; } // ########################################### if(transfoOk){ file_image = ouverture_ecriture_fichier_image(&(tab_pixels.type),nomImage,transformation); if(file_image == NULL) return 1; if(ecriture_fichier(file_image,&tab_pixels,nomImage,transformation)) printf("[O]\tEcriture du fichier reussie, transformation sauvegardee\n"); else printf("[X]\tEcriture du fichier rate, transformation non sauvegardee\n"); } // On libère le tableau de pixels vider_tab_pixels(&tab_pixels); ligne_separation('='); return 0; }