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

Bibliothèques tierces Python Discussion :

Conversion C en python


Sujet :

Bibliothèques tierces Python

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 6
    Points
    6
    Par défaut Conversion C en python
    Bonjour,

    Je souhaite transcrire cette algorithme C en Python, mais je ne suis pas trés douer... Pourriez vous m'aider?


    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
    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
    #include <iostream>
    #include <stdio.h>
     
    using namespace cv;
     
    /** @function main */
    int main(int argc, char** argv)
    {
      Mat src, src_gray;
     
      /// Read the image
      src = imread( argv[1], 1 );
     
      if( !src.data )
        { return -1; }
     
      /// Convert it to gray
      cvtColor( src, src_gray, CV_BGR2GRAY );
     
      /// Reduce the noise so we avoid false circle detection
      GaussianBlur( src_gray, src_gray, Size(9, 9), 2, 2 );
     
      vector<Vec3f> circles;
     
      /// Apply the Hough Transform to find the circles
      HoughCircles( src_gray, circles, CV_HOUGH_GRADIENT, 1, src_gray.rows/8, 200, 100, 0, 0 );
     
      /// Draw the circles detected
      for( size_t i = 0; i < circles.size(); i++ )
      {
          Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
          int radius = cvRound(circles[i][2]);
          // circle center
          circle( src, center, 3, Scalar(0,255,0), -1, 8, 0 );
          // circle outline
          circle( src, center, radius, Scalar(0,0,255), 3, 8, 0 );
       }
     
      /// Show your results
      namedWindow( "Hough Circle Transform Demo", CV_WINDOW_AUTOSIZE );
      imshow( "Hough Circle Transform Demo", src );
     
      waitKey(0);
      return 0;
    }

  2. #2
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Ce n'est visiblement pas du C mais du C++. les fonctions qui sont appelées comme GaussianBlur, HoughCircles ou cvRound, au hasard, sont vraissemblablement déclarées dans "opencv2/highgui/highgui.hpp"ou "opencv2/imgproc/imgproc.hpp" que tu inclus au début du programme. Si tu n'as pas les fichiers sources de "opencv2/highgui/highgui.cpp" et "opencv2/imgproc/imgproc.cpp", tu ne pourras pas transcrire ces programmes.

    A+

    Pfeuh

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 298
    Points : 6 778
    Points
    6 778
    Par défaut
    Leanaa il faudra que tu apprennes l'usage des balises code.

    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
     
    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
    #include <iostream>
    #include <stdio.h>
     
    using namespace cv;
     
    /** @function main */
    int main(int argc, char** argv)
    {
      Mat src, src_gray;
     
      /// Read the image
      src = imread( argv[1], 1 );
     
      if( !src.data )
        { return -1; }
     
      /// Convert it to gray
      cvtColor( src, src_gray, CV_BGR2GRAY );
     
      /// Reduce the noise so we avoid false circle detection
      GaussianBlur( src_gray, src_gray, Size(9, 9), 2, 2 );
     
      vector<Vec3f> circles;
     
      /// Apply the Hough Transform to find the circles
      HoughCircles( src_gray, circles, CV_HOUGH_GRADIENT, 1, src_gray.rows/8, 200, 100, 0, 0 );
     
      /// Draw the circles detected
      for( size_t i = 0; i < circles.size(); i++ )
      {
          Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
          int radius = cvRound(circles[i][2]);
          // circle center
          circle( src, center, 3, Scalar(0,255,0), -1, 8, 0 );
          // circle outline
          circle( src, center, radius, Scalar(0,0,255), 3, 8, 0 );
       }
     
      /// Show your results
      namedWindow( "Hough Circle Transform Demo", CV_WINDOW_AUTOSIZE );
      imshow( "Hough Circle Transform Demo", src );
     
      waitKey(0);
      return 0;
    }
    Nettement plus joli, non ?

    Traduction approximative
    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
     
    imgpath = '/chemin/de/limage'
     
    # Read the image
    src = cvLoadImage(imgpath, 1)
     
    # Convert it to gray
    cv.CvtColor(src, src_gray, cv.CV_BGR2GRAY)
     
    # Reduce the noise so we avoid false circle detection
    cv.Smooth(src_gray, src_gray, cv.CV_GAUSSIAN, 9, 9)
     
    # vector<Vec3f> circles; (D'après moi, mais c'est pas garanti)
    circles = cv.CreateMat(1, 2, cv.CV_32FC3)
     
    # Apply the Hough Transform to find the circles
    cv.HoughCircles(src_gray, circles, cv.CV_HOUGH_GRADIENT, 1, src_gray.rows/8, 200, 100)
     
    # Draw the circles detected
    for c in circles:
        center = cvRound(c[0]), cvRound(c[1])
        radius = cvRound(c[2])
     
        # Voir ici: 
        #http://opencv.willowgarage.com/documentation/python/core_drawing_functions.html#circle
        Circle(src, center, radius, Scalar(0, 255, 0), thickness=-1, lineType=8, shift=0)
        Circle(src, center, radius, Scalar(0, 0, 255), thickness=3, lineType=8, shift=0)
     
    # Show your results
    cv.NamedWindow("Hough", CV_WINDOW_AUTOSIZE )
    cv.ShowImage("hough", src )
     
    if cv.WaitKey(10) == 27:
             break
    Ce code est suceptible de fonctionner, approximativement.

    La doc:
    http://opencv.willowgarage.com/docum...tionality.html

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    En effet, je ne suis pas très douer en informatique, c'est un sujet de secours que l'on ma donner à faire suite a des problèmes techniques (je suis plus spécialiser en optique normalement [pas les lunettes]), maintenant mon probleme c'est que je n'arrive pas a installer opencv sur python...

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 298
    Points : 6 778
    Points
    6 778
    Par défaut
    Citation Envoyé par Leanaa Voir le message
    En effet, je ne suis pas très douer en informatique,...
    Bienvenue au club

    Installer pyopencv sur quel OS. Windows, Linux, Mac ?

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    windows, je l'est télécharger mais je n'arrive pas a le mettre sous python

  7. #7
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 298
    Points : 6 778
    Points
    6 778
    Par défaut
    Je suppose que c'est ceci que tu as installé:
    http://sourceforge.net/projects/open...ncv-win/2.4.0/

    Si je comprend bien l'interfaçage Python est inclus.

    Regardes dans C:\opencv\build\python\2.7
    et dans C:\Python27\Lib\site-packages

    Normalement, tu devrais le trouver dans le deuxième emplacement, mais on peut lire à divers endroits qu'il faut le déplacer soi-même.

    Si tu as une autre version de Python que 2.7, tu adaptes.

    Sinon, il existe ceci:
    http://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv
    choisis la bonne version 32 ou 64 bytes.

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    C'est bon cv est utilisable cependant il y a des erreurs que je ne comprend pas

    voila une ligne de mon programme : thosi = cv.GetSize(Img),8,1

    Et voici l'érreur que je recoit : thosi = cv.GetSize(Img),8,1
    TypeError: CvArr argument 'arr' must be IplImage, CvMat or CvMatND. Use fromarray() to convert numpy arrays to CvMat or cvMatND

    Or lorsque je fait une recherche pour trouver cette fonction elle existe, d'où proviens l'érreur? (j'ai essayer d'enlever le 8 et la 1 mais ca change rien)

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 298
    Points : 6 778
    Points
    6 778
    Par défaut
    Salut,

    Où as-tu trouvé cette ligne de code ?
    Ce doit être uniquement donc tu dois effacer tout ce qui suit.

    Le message d'erreur que tu as t'indique que l'objet 'Img' n'est pas conforme.
    Il attend une matrice (cvArr) ou une image cv.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    src = cvLoadImage(self.img, 1)
    size = cvGetSize(src)
    Juste avant ton cv.GetSize, fait un pour voir.

    Note, j'utilise cvGetSize et non pas cv.GetSize parce que je n'ai pas la même version que toi.

Discussions similaires

  1. Conversion Double precision python
    Par squallmrs dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 14/06/2012, 12h17
  2. Conversion petit code Python vers MATLAB
    Par recherche888 dans le forum MATLAB
    Réponses: 13
    Dernier message: 30/11/2011, 11h34
  3. Réponses: 1
    Dernier message: 15/04/2008, 13h00
  4. Conversion de format date entre excel et python
    Par uldrych.maillet dans le forum Général Python
    Réponses: 2
    Dernier message: 20/02/2008, 12h02
  5. programme python : conversion nombre en chaine de caracteres
    Par koala_64 dans le forum Général Python
    Réponses: 6
    Dernier message: 02/11/2007, 22h10

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