Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1
    Invité de passage
    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 : 0
    Points
    0

    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 :
    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 Expert
    Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    mars 2006
    Messages
    838
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : mars 2006
    Messages : 838
    Points : 1 064
    Points
    1 064

    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 Confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 823
    Points : 2 518
    Points
    2 518

    Par défaut

    Leanaa il faudra que tu apprennes l'usage des balises code.

    Code :
    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 :
    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
    Vincent
    Oqapy . Qarte . PaQager

  4. #4
    Invité de passage
    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 : 0
    Points
    0

    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 Confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 823
    Points : 2 518
    Points
    2 518

    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 ?
    Vincent
    Oqapy . Qarte . PaQager

  6. #6
    Invité de passage
    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 : 0
    Points
    0

    Par défaut

    windows, je l'est télécharger mais je n'arrive pas a le mettre sous python

  7. #7
    Expert Confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 823
    Points : 2 518
    Points
    2 518

    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.
    Vincent
    Oqapy . Qarte . PaQager

  8. #8
    Invité de passage
    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 : 0
    Points
    0

    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 Confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 823
    Points : 2 518
    Points
    2 518

    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 :
    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.
    Vincent
    Oqapy . Qarte . PaQager

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •