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

Python Discussion :

[OpenCV] ouvrir une image indirectement


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 8
    Par défaut [OpenCV] ouvrir une image indirectement
    Bonjour, je débute a python et je rencontre un problème pour un de mes projets.

    J'utilise cv2.imread('chemin de l'image') pour lire une image, ce qui fonctionne quand je rentre le chemin manuellement.
    J'essaye maintenant d'ouvrir des images de façon aléatoire parmi une sélection d'images qui ne sont pas dans le même dossier. J'ai un fichier .txt avec les chemins de toutes mes images et un script qui choisi aléatoirement un des chemin et l’enregistre dans une variable de type string que j'ai appelé "path".

    J'essaye ensuite d'ouvrir l'image mais cv2.imread(path) me renvoi 'None'

    Est-il possible de charger une image indirectement comme j'essaye de le faire? Quand je rentre manuellement le même chemin avec les guillemets tout marche correctement.

    exemple de chemin que j'essaye d'ouvrir:
    path: \\\curvsd-hr\\F\\FlightPathInventory\\ImageDatabase\\NSW17222750\\finale\\Building_nDVI24984_3_9_5.99850237709.tif

    Faut-il que j'utilise une autre méthode ?

    Je vous remercie d'avance

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Ça doit fonctionner, le problème vient vraisemblablement de la manière dont tu l'écris.

    Éventuellement l'encodage peut faire défaut.

    J'utilise ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        def load_image(self, img):
            self.img = img.encode(sys.getfilesystemencoding())
            try:
                src_image = cv.LoadImage(self.img, 1)
            except Exception as why:
                # Traite l'erreur, retourne False
     
            if not src_image:
                # Traite l'erreur, retourne False
    Notes:
    - Les messages d'erreur d'OpenCV peuvent être inconsistant.
    - C'est quoi "\\\curvsd-hr" ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 8
    Par défaut
    Salut, merci de ta réponse!

    curvsd-hr est l'ordinateur où sont stockées mes images, le dossier F étant partagé sur le réseau.

    Comme tu dis ça vient très certainement de la manière dont je l'ai écrit, je débute complètement en programmation.

    Voila mon 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
    #opening house blobs
     
    import numpy as np
    import cv2
    import random
     
    f = open('houses.txt','r') #fichier qui contient les chemins de mes images
    houses = f.readlines()
    randomPick = random.choice(houses)
    print randomPick
     
     
    if '\\' in randomPick:
        b = randomPick.replace('\\','\\\\') 
        print b
        c= b[3:]
    path = '\\'+'\\\curvsd-hr\\\F'+ c #permet d'avoir le chemin de la bonne forme
    print 'path: ' + path
    print path
     
     
    im =cv2.imread(path)
    print   im
     
    if (im is None):
        print "No image found! Check path."
    else:
        cv2.namedWindow('Display Window') 
        cv2.imshow('Display Window',im)
        cv2.waitKey(0)

    La deuxième partie du code c'est du bidouillage pour pouvoir arriver a avoir un 'path' identique au chemin qui fonctionne quand je le rentre manuellement. C'est surement pas très académique je fais comme je peux

  4. #4
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Résumons,

    Cette ligne:
    retourne : \\\curvsd-hr\\F\\FlightPathInventory\\ImageDatabase\\NSW17222750\\finale\\Building_nDVI24984_3_9_5.99850237709.tif

    Si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    im =cv2.imread("\\\curvsd-hr\\F\\FlightPathInventory\\ImageDatabase\\NSW17222750\\finale\\Building_nDVI24984_3_9_5.99850237709.tif")
    ça fonctionne, mais pas si tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    im =cv2.imread(path)
    Dans ce genre de situation, on commence par les vérifications simples.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print path, os.path.isfile(path)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    path = path.encode(sys.getfilesystemencoding())
    Après on verra.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 8
    Par défaut
    C'est tout à fait ça !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print path, os.path.isfile(path)
    retourne False et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    path = path.encode(sys.getfilesystemencoding())
    ne change rien.

    J'ai fais d'autres tests :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    path = '\\\curvsd-hr\\F'+ c 
    test= '\\\curvsd-hr\\F\\FlightPathInventory\\ImageDatabase\\NSW18283321\\finale\\Building_nDVI3375_5_9_4.55823898273.tif'
    retourne : \\curvsd-hr\F\FlightPathInventory\ImageDatabase\NSW18283321\finale\Building_nDVI3375_5_9_4.55823898273.tif
    et retourne la même chose.

    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    im = cv2.imread(test)
    ça fonctionne. Mais pas si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    im = cv2.imread(path)

  6. #6
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Si os.path.isfile(path) retourne False c'est clairement un problème chemin.

    Plutot que de le construire avec l'opérateur + utilise os.path.join() pour que ce soit Python lui-même qui construise le chemin du fichier en respect des règles de ton OS.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    os.path.join('\\\curvsd-hr', 'F', c)
    Pour les trois backslashs du début, faudra peut-être ajuster. jusqu'à ce que os.path.isfile(path) retourne True

Discussions similaires

  1. Ouvrir une image avec CxImage
    Par le-makinero dans le forum MFC
    Réponses: 7
    Dernier message: 24/04/2006, 15h33
  2. Ouvrir une image au hasard
    Par rpoulin dans le forum Langage
    Réponses: 4
    Dernier message: 25/03/2006, 22h34
  3. [VBA-E] Ouvrir une image en ".bmp"
    Par Xavos dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/03/2006, 09h48
  4. [VBA-E]Ouvrir une image jpg àl'aide d'une macro
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/03/2006, 09h47
  5. Ouvrir une image avec paint depuis un formulaire
    Par gui38 dans le forum Access
    Réponses: 3
    Dernier message: 14/11/2005, 16h40

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