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

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 4
    Points
    4
    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 éprouvé

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    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.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  3. #3
    Membre éprouvé

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    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.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  4. #4
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 4
    Points
    4
    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
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 4
    Points
    4
    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 éprouvé

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    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.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  7. #7
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    - oui en 8:1 ça marche
    - mon image source est juste creer avec la fonction createImage, je specifie juste le format 16:1

    seb

  8. #8
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    OK j'avais pas lu la citation joint à ton précedent message, tres intéressant ... je vais voir ce que je peux faire

    thanks, je te tiens au courant

  9. #9
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    salut,

    "cvCvtScale(src,dest,factor,shift)" sert à appliquer un facteur et un offset à chaque élément de la matrice d'entrée pour obtenir la matrice de sortie, donc inutile dans mon cas.

    et "cvCvtColor" ne contient pas l'option permettant de convertir une image GREY 16 bits (V4L2_PIX_FMT_Y16) en une image GREY 8 bits. De toute façon ca ne m'interesse pas car de l'image compressée en jpg je dois être capable de recreer le buffer Y16 ...

  10. #10
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    au fait j'ai acces au fichier_open_cv.h mais pas au .cpp

  11. #11
    Membre éprouvé

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Je comprends pas trop ton dernier post.
    au fait j'ai acces au fichier_open_cv.h mais pas au .cpp
    Comment as tu compiler ton OpenCv sans les .cpp ?

    Ou alors tu as directement récupéré les binaries.

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  12. #12
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    En effet j'ai récupéré les lib.so et lib.a ainsi que les header.h car je suis utilisateur de la lib et non développeur de la lib. D'ailleurs je ne compte pas mettre mon nez dans les sources d'openCV, j'ai pas trop le temps. Je suis à la recherche d'une solution "rapide" et mettre mon nez dans les sources openCV me semble scabreux...

  13. #13
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    j'ai trouvé une solution à mon probleme, a partir de mon buffer de short je creer un buffer de de char tel que buffer_de_char[i] = buffer_de_short x ( 255/65535). et j'affecte ensuite ce buffer l'image openCV.

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