IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Détection de contour


Sujet :

Qt

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 10
    Points
    10
    Par défaut Détection de contour
    Bonjour;
    Est ce que je peux utiliser Qt pour le traitement d'image sans passer par Opencv, par exemple je veux détecter les contours avec l'algorithme de Canny.
    Merci d'avance

  2. #2
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 889
    Points
    1 889
    Par défaut
    Bonjour,

    Qt ne dispose pas de fonctionnalités dédiées au traitement d'images. Les seuls options sont soit de développer l'algo soit même, soit d'utiliser une bibliothèque (OpenCV ou autre).

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 248
    Points : 74
    Points
    74
    Par défaut
    Le mieux est d'utiliser Canny avec Opencv effectivement, la librairie étant gratuite en plus.

    Voici une code de détection de contour très simple que j'ai fait:
    (le chargement de l'image peut être améliorer)

    main.cpp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    #include "main.h" 
     
    using namespace cv;
    using namespace std;
     
     
     
    int main(int argc, char** argv)
    {
     
      cvDestroyAllWindows();
     
      // Chargement d'une nouvelle image
      Mat image = imread("my_image.png", 1);
     
      if( image.empty() )
      {
    	cout << "Couldn't load image " << endl; 
    	return -1;
      }
     
      IplImage *img = &image.operator IplImage();
     
      IplImage* grayImg = NULL;  // tmp image object
      IplImage* edgeImg = NULL;  // output image object
     
      int lowerThreshold = 50;  // lower canny edge threshold initial setting
      int upperThreshold = 200; // upper canny edge threshold initial setting
      int windowSize = 3;		// canny edge window size
     
      char* windowName = "Canny Edge Detection"; // window name
     
      bool keepProcessing = true;	// loop control flag
      char key;						// user input
     
      // create window object
     
      cvNamedWindow(windowName, 0 );
     
      // add adjustable trackbars for ech of the canny edge parameters
     
      cvCreateTrackbar("Lower", windowName, &lowerThreshold, 255, NULL);
      cvCreateTrackbar("Upper", windowName, &upperThreshold, 255, NULL);
      cvCreateTrackbar("Window", windowName, &windowSize, 7, NULL);
     
     
      // create other images (and make sure they have the same origin)
     
      grayImg = cvCreateImage(cvSize(img->width,img->height), img->depth, 1);
      grayImg->origin = img->origin;
     
      edgeImg = cvCreateImage(cvSize(img->width,img->height), img->depth, 1);
      edgeImg->origin = img->origin;
     
      // grab the next frame to maintain sync
     
     
     
     // start main grab/process/display loop
     
      while(keepProcessing)
      {
     
     
     
    	// check that the window size is always odd and > 1 
     
    	if ((fmod((double) windowSize, 2) == 0) || (windowSize <= 2)) 
    	{
    		windowSize++;
    	}
     
       // convert colour of captured image to greyscale and perform
       // edge detection using canny edge detection algorithm
     
       cvCvtColor(img, grayImg, CV_BGR2GRAY);
       cvCanny(grayImg, edgeImg, lowerThreshold, upperThreshold, max(3, windowSize));
     
       Mat edgeMat(edgeImg);
       bitwise_not (edgeMat, edgeMat); 
     
       // display image in window
     
       imshow(windowName, edgeMat);
     
       // start event processing loop
     
       // here we use a 40 msec delay for ~25 fps (100/25 = 40) 
     
        key = cvWaitKey(40);
     
    	if (key == 'x')
    	{
    	   // if user presses "x" then exit
    	   printf("Keyboard exit requested : exiting now - bye!\n");	
    	   keepProcessing = false;
    	}
     
     
     
      }
     
      // destroy window object
      // (triggered by event loop *only* window is closed)
     
      cvDestroyWindow( windowName );
     
      // release capture device
     
      // destroy image objects
     
      cvReleaseImage( &grayImg );
      cvReleaseImage( &edgeImg );
     
      // Note that the image captured by the device is allocated/released 
      // by the capture function. 
      // There is no need to release it explicitly.
     
      // all OK : main returns 0
     
      return 0;
     
    }

    main.h:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
     
    #ifndef MAIN_H
    #define MAIN_H
     
    #include <winsock.h>
     
    #include "opencv2/core/core.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/highgui/highgui.hpp"
    #include <opencv2/opencv.hpp> 
     
    #include <iostream>
    #include <math.h>
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <iterator>
     
     
     
     
     
     
    #endif
    "Les ordinateurs font toujours ce qu'on leur dit, mais jamais ce qu'on veut."

Discussions similaires

  1. Détection de contour PREWITT
    Par b_reda31 dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 05/02/2008, 23h44
  2. [Débutante] Détection de contour
    Par diana82 dans le forum Images
    Réponses: 3
    Dernier message: 29/10/2007, 17h20
  3. Détection de contours sur une vidéo
    Par willem77 dans le forum OpenCV
    Réponses: 0
    Dernier message: 11/09/2007, 14h45
  4. [débutant]traitement image, détection de contour
    Par seerauber dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 13/07/2007, 16h25
  5. Détection de contour
    Par biquet dans le forum Images
    Réponses: 11
    Dernier message: 19/01/2007, 18h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo