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 :

cv::Mat data & md5


Sujet :

OpenCV

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut cv::Mat data & md5
    Bonjour,

    j'ai une petite question, pour être sûr de quelque chose...

    Si je fais un md5 sur le champs data d'une cv::Mat, je devrais logiquement avoir une signature unique pour chaque image différente non ? (évidemment ce n'est pas de la comparaison d'image)

    J'ai fais un test, mais je retombe parfois sur un même md5, alors je me demande... Évidemment, ça peut aussi venir de mon code...

    Bon le cast est assez moche, mais j'ai essayé proprement et j'avais aussi des doublons de md5, alors je met le plus petit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QCryptographicHash md5Hash(QCryptographicHash::Md5);
    md5Hash.addData( QByteArray((const char*) myImage.data) ) ;
    QString myMd5 = md5Hash.result().toHex().constData();
    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Au vu de la documentation du constructeur de QByteArray :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QByteArray::QByteArray(const char * data, int size = -1)
    Constructs a byte array containing the first size bytes of array data.

    If data is 0, a null byte array is constructed.

    If size is negative, data is assumed to point to a nul-terminated string and its length is determined dynamically. The terminating nul-character is not considered part of the byte array.

    QByteArray makes a deep copy of the string data.

    See also fromRawData().
    Il te faudrait je pense passer en deuxième argument le nombre d'éléments de ton cv::Mat.

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut
    ah oui effectivement, vu sous cet angle

    je tente

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut
    cela dit j'avais essayé avec QByteArray::QByteArray ( const char * str ), en castant plus proprement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::string mystr;
    mystr.append(reinterpret_cast<const char*>(myImage.data));
    QByteArray byteArray(mystr.c_str());
    idem ...

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut
    effectivement, avec QByteArray::QByteArray(const char * data, int size) et en spécifiant la taille ça a l'air de mieux fonctionner

    C'est surement à moi, en passant par une string, de rajouter le caractère de terminaison, voilà pourquoi ça ne marchait pas avec ma str...

    Si je me suis pas planté, la taille de ma Mat M est M.elemSize()*M.cols*M.rows non ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par drKzs Voir le message
    Si je me suis pas planté, la taille de ma Mat M est M.elemSize()*M.cols*M.rows non ?
    Je dirais que oui

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut
    Merci pour ton aide, c'est bien mieux maintenant

    hop, résolu

  8. #8
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut
    bon, je reviens héhéhé (rire diabolique)

    j'ai un résultats bizarre sur ma base de test, un md5 identique alors que les images sont très légèrements différentes (un schéma électronique avec une lettre qui diffère)

    Je me demande si j'ai bien passé la bonne taille des data en fait...

    Car le Mat.data est un uchar* qui pointe vers un tableau 1D, même pour une matrice 2D je crois. Hors si je calcule la taille colonnes*lignes, je raisonne sur la matrice, pas sur ce tableau uchar* non ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Je ne connais pas trop le fonctionnement interne d'OpenCV, mais cela m'étonnerais beaucoup qu'il ne fonctionne pas en linéaire, et donc que ta matrice 2D ne soit au final qu'un simple tableau 1D.
    As-tu essayé d'afficher et de vérifier les valeurs ?

  10. #10
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut
    tu veux dire d'afficher le contenu du champ data ? non pas vraiment :/

    Mais le contenu n'a pas de raison d'être mauvais, je l'ouvre à partir cv::imread ...

    J'ai trouvé ce thread :
    http://stackoverflow.com/questions/1...o-c-constructs

    donc effectivement, cols*rows ou donc mieux un step*rows semblent bien renvoyer la taille du champs data ... Après, pour l'utilisation du elemSize, je sais pas trop, il n'est pas mentionné là...

    Il faudrait que j'essaye sans passer par Qt, au cas où des encodages soit à l'origine du pb (hormis le problème de mon codage )

  11. #11
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut
    ok, mon problème venait du fait que la diff des images était dans le canal alpha, que je chargeais pas !!

    donc mon problème avait bien été résolu, alors je le re-résouds Merci encore

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/03/2012, 16h53
  2. Réponses: 1
    Dernier message: 24/11/2009, 15h11
  3. Query data set
    Par Sandra dans le forum JBuilder
    Réponses: 3
    Dernier message: 20/01/2003, 10h08
  4. [Pointer]Treeview.Data
    Par rbag dans le forum Composants VCL
    Réponses: 7
    Dernier message: 31/08/2002, 01h44

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