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

OpenCV Discussion :

Erreur avec cvSaveImage


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Par défaut Erreur avec cvSaveImage
    Bonjour à tous,

    J'utilise opencv pour pouvoir notamment exporter dans des fichiers des buffers "image" chargés en mémoire.

    1- pour creer une structure image, j'utilise:
    img = cvCreateImage(cvSize(width, height), depth, nchannels);

    2- pour sauvegarder cette image dans un fichier j'utilise:
    string filename = "mon_fichier.jpg"
    cvSaveImage(filename.c_str(),img)

    conclusion ca marche tres bien, sauf dans un cas:
    lorsque depth = IPL_DEPTH_16U et nchannels = 1;

    l'erreur retournée est la suivante:

    OpenCV ERROR: Unsupported format or combination of formats (Unsupported combination of input/output formats)
    in function cvConvertImage, utils.cpp(573)
    Terminating the application...
    called from cvUnregisterType, cxpersistence.cpp(4933)
    Terminating the application...
    called from cvUnregisterType, cxpersistence.cpp(4933)[/I][/I]


    Il se trouve que j'ai besoin de de ce format, car je suis sensé chargé dans ma structure image un buffer type Y16 (norme V4L2), chaque pixel (composante Y) est codé sur 16 bits en little endian (les 8 premiers bits sont les bits de poids faible).

    Could you help me please ?

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Salut, apparemment, en lisant la doc :
    cvConvertImage
    Converts one image to another with optional vertical flip

    void cvConvertImage( const CvArr* src, CvArr* dst, int flags=0 );
    src
    Source image.
    dst
    Destination image. Must be single-channel or 3-channel 8-bit image.
    flags
    The operation flags:
    CV_CVTIMG_FLIP - flip the image vertically CV_CVTIMG_SWAP_RB - swap red and blue channels. In OpenCV color images have BGR channel order, however on some systems the order needs to be reversed before displaying the image (cvShowImage does this automatically).
    The function cvConvertImage converts one image to another and flips the result vertically if required. The function is used by cvShowImage.
    Ton codage sur 16 bits n'as pas l'air de passé. Est ce que ca marche en "8 bits, 1 canal" ?

    Je vais essayer de lire le code pour voir si y'a moyen de faire quelquechose.

    G.

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Euh, en gros va falloir que tu refasses la fonction de conversion toi même. Je ne sais psa de quel type sont tes images d'entrée, ni si elles sont toutes du même type, mais actuellement, seules les conversions vers du 8 bits sont implémentés.

    Ca ne doit pas être sorcier, mais faut le faire .

    regarde dans highui/utils.cpp, le fonction cvConvertImage.

    G.

  4. #4
    Membre habitué
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Par défaut
    thanks pour ta réponse,

    c'est strange car en:
    lorsque depth = IPL_DEPTH_16U et nchannels = 3;
    ca marche !

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Par défaut
    la fonction "saveImage" d'opencv accepte de me generer un fichier.jpg dans le cas ou depth =16U et nchannels = 3

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Est ce que ca marche en 8 : 1 ?
    De quel type sont images sources ? 16 : 3 ?

    cvSaveImage
    Saves an image to the file

    int cvSaveImage( const char* filename, const CvArr* image );
    filename
    Name of the file.
    image
    Image to be saved.
    The function cvSaveImage saves the image to the specified file. The image format is chosen depending on the filename extension, see cvLoadImage. Only 8-bit single-channel or 3-channel (with 'BGR' channel order) images can be saved using this function. If the format, depth or channel order is different, use cvCvtScale and cvCvtColor to convert it before saving, or use universal cvSave to save the image to XML or YAML format.
    Il doit y avoir la réponse à ton problème la dedans.

    G.

Discussions similaires

  1. Erreur Avec Interbase
    Par smokemon dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/10/2004, 07h24
  2. Erreur avec procédure LockWorkStation ...
    Par simonseztech dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/08/2004, 15h33
  3. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  4. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 21h37
  5. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 00h25

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