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

C++ Discussion :

OpenCV: Charger une séquence d'images "File00X.png"


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    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 : 260
    Par défaut OpenCV: Charger une séquence d'images "File00X.png"
    Bonjour, tout est dans le titre !!

    Je souhaiterais charger une par une la séquence d'images intitulées "File001.png", "File002.png", ..... "File00X.png", puis effectuer sur chacune des calculs de comparaison avec une autre image fixe "banque_de_france.png".

    Je sais charger une image, mais je ne sais pas comment charger une séquence d'images, alors bien sûr avec une boucle comme je l'ai ébauchée dans le code ci-dessous, mais comment dépatouiller le truc??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int mainStaticMatch()
    {
      IplImage *img1, *img2[3];
      
      img1 = cvLoadImage("Banque_de_France1.jpg");
      
      for (int i=0; i<3; i++)
      {
    	 img2[i] = cvLoadImage("file"+i+".jpg");  NE MARCHE PAS :(
      }

    Votre aide de pro de l'informatique me serait fort utile !!

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    Tu pourrais déjà utiliser l'API C++ d'OpenCV :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    cv::Mat bdf = imread("Banque_de_France1.jpg");
    cv::Mat sequence[3];
     
    for (int i=0; i<3; ++i)
    {
    std::stringstream ss;
    ss << "file" << i << ".jpg";
    sequence[i] = cv::imread(ss.str());
    }

  3. #3
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    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 : 260
    Par défaut
    merci pour votre aide gracieuse !!

    je vais voir tout ça !! j'allume mon neurone !

  4. #4
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    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 : 260
    Par défaut
    RE !!!! Malaheureusement ce programme compile, mais l'image ne s'affiche pas !!!


    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
     
     
     
    int mainStaticMatch()
    {
     
      IplImage *img1;
      Mat img2[3];
      img1 = cvLoadImage("Banque_de_France1.jpg");
     
      for (int k=0; k<3; k++)
      {
     
    	stringstream ss;
     
    	ss << "file" << k << ".jpg";
     
    	img2[k] = imread(ss.str());
     
      }
     
      cvNamedWindow("1", CV_WINDOW_AUTOSIZE );
      cvShowImage("1", &img2[0]);
     
      cvWaitKey(0);
     
      return 0;
    }

    NB: Voici comment sont stockées mes images:

    file-00001.jpg
    file-00002.jpg
    file-00003.jpg


    L'emplacement est bon, car j'arrive à charger et à afficher img1 qui se trouve au même endroit !!!

    IL ne peut donc y avoir que 2 erreurs possibles:
    - soit votre code est déficient (peu probable étant donné votre talent!)
    - soit le "nom à numéros " file-0000x n'est pas reconnu. Quel format de nom dois-je donner à mes images?



    merci !!

  5. #5
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Le nom à numéro est mal reconnu. Tu as oublié un "-" dans ta façon de former le nom de fichier.

    En plus, tu n'inclus pas les 0.

    Bref, les fichiers que tu essaies d'ouvrir actuellement sont file0.jpg, file1.jpg, et file2.jpg .

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    J'ai voulu éditer mon message pour prévenir que le stringstream allait contenir des noms de fichier du type "fileN.jpg" au lieu de "file000N.jpg", j'aurais peut-être dû.

    Si c'est gênant, il suffit de formater un peu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ss << "file-" << setfill('0') << setw(4) << i << ".jpg";
    Pour plus de détails :
    http://www.cplusplus.com/reference/i...ators/setfill/
    http://www.cplusplus.com/reference/i...pulators/setw/

    PS : Si le reste du programme est codé avec l'API C d'OpenCV (IplImage* au lieu de cv::Mat, typiquement) alors oublie ce que j'ai dit et n'utilise pas cv::Mat ni le reste de l'API C++ ; ce serait plus source de conflits qu'autre chose.

  7. #7
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    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 : 260
    Par défaut
    Merci pour toutes ces informations !
    J'ai toujours une erreur malgré tout, la voici:

    J'ai simplifier l'appellation des img2[]:
    file1.jpg
    file2.jpg
    file3.jpg

    Exception non gérée à 0x5093dfc3 dans TestOpenCV.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x0053857d.

    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
     
     
    #include <stdlib.h>
    #include "surflib.h"
    #include "kmeans.h"
    #include <ctime>
    #include <iostream>
    #include <iomanip>
     
     
     
    int mainStaticMatch()
    {
      IplImage img1;
      IplImage img2[3];
     
     
      img1 = *cvLoadImage("Banque_de_France1.jpg");
     
      for (int k=0; k<3; k++)
      {
    	stringstream ss;
    	ss << "file" << k << ".jpg";
    	//ss << "file-" << setfill('0') << setw(4) << k << ".jpg";
    	img2[k] = imread(ss.str());
     
      }
     
     
      cvNamedWindow("1", CV_WINDOW_AUTOSIZE );
      cvShowImage("1", &img2[0]);
      cvWaitKey(0);
     
      return 0;
    }

    Votre aide me serait fort utile...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Charger une séquence d'images à partir d'un bouton
    Par Boutheina87 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 27/06/2014, 06h39
  2. programmer une séquence d'images
    Par sino dans le forum C++Builder
    Réponses: 5
    Dernier message: 14/02/2006, 11h57
  3. Reconnaître une position dans une séquence d'images
    Par echataig dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 23/01/2006, 17h44
  4. Réponses: 4
    Dernier message: 14/10/2003, 08h58

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