Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Bibliothèques tierces
Bibliothèques tierces Forum d'entraide pour les autres bibliothèques non présentes dans la distribution standard de Python
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/06/2012, 15h52   #1
Leanaa
Invité de passage
 
Femme
Étudiant
Inscription : 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;
}
Leanaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2012, 09h57   #2
pfeuh
Membre Expert
 
Développeur en systèmes embarqués
Inscription : mars 2006
Messages : 763
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 : 763
Points : 1 031
Points : 1 031
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
pfeuh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2012, 12h04   #3
VinsS
Membre Expert
 
Homme
Inscription : octobre 2008
Messages : 942
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : octobre 2008
Messages : 942
Points : 1 413
Points : 1 413
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
VinsS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2012, 14h50   #4
Leanaa
Invité de passage
 
Femme
Étudiant
Inscription : 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
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...
Leanaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2012, 15h24   #5
VinsS
Membre Expert
 
Homme
Inscription : octobre 2008
Messages : 942
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : octobre 2008
Messages : 942
Points : 1 413
Points : 1 413
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
VinsS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2012, 15h57   #6
Leanaa
Invité de passage
 
Femme
Étudiant
Inscription : 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
windows, je l'est télécharger mais je n'arrive pas a le mettre sous python
Leanaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2012, 19h47   #7
VinsS
Membre Expert
 
Homme
Inscription : octobre 2008
Messages : 942
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : octobre 2008
Messages : 942
Points : 1 413
Points : 1 413
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
VinsS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2012, 15h04   #8
Leanaa
Invité de passage
 
Femme
Étudiant
Inscription : 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
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)
Leanaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2012, 16h36   #9
VinsS
Membre Expert
 
Homme
Inscription : octobre 2008
Messages : 942
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : octobre 2008
Messages : 942
Points : 1 413
Points : 1 413
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
VinsS est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h36.


 
 
 
 
Partenaires

Hébergement Web