コード例 #1
0
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;
 
}
コード例 #2
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)));
}
コード例 #3
0
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");
  
}
コード例 #4
0
ファイル: comManger.cpp プロジェクト: utcoupe/coupe2011
/**
    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);
    }
}
コード例 #5
0
ファイル: main.c プロジェクト: ErwanLbp/STI
 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;  
 }