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 :

OpenCV: lire les niveaux rgb d'un pixel dans un Mat


Sujet :

OpenCV

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 114
    Points : 53
    Points
    53
    Par défaut OpenCV: lire les niveaux rgb d'un pixel dans un Mat
    Bonjour,

    je rougis de ressortir un tel sujet, j'ai consulté bien des forums (il y en a à foison) et doc, mais je ne progresse pas.
    Je cherche donc à lire séparément les valeurs RVB dune image sous opencv, le plus simplement possible. (ou HSV car je devrai probablement bossé sur du HSV à terme)
    Voilà où j'en suis , en expliquant ce que je comprends (surement je comprends mal certaines choses)
    je déclare un Mat non forcé en taille ni type (car je ne sais quoi choisir comme type)
    je lit une image couleur .png
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    img_mat = imread(im_en_cours);
    j'affiche dans la console img_mat,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cout << img_mat << endl;
    et cela correspond bien à mon image unicolore (les valeurs attendues BRG sont exactes)
    [128,64,32,128,64,32,128,64,32, ......
    si je comprends bien ces valeurs représentent
    bleu_pixel0 , vert_pixel0 , rouge_pixel0 , bleu_pixel1 , vert_pixel1 , .....
    je veux récupérer à souhait l'une ou l'autre de ces valeurs.
    Et là c'est un peu la panique, j'aitesté du côté du .at, du cdGet2d et d'un pointeur uint *myData img_mat, à chauq efois en m'inspirant de forum qui traitent ce sujet et de la doc, mais je ne m'en sors pas.

    le size de l'image est [12 x 24] mais peu importe la taille de l'image
    le type retourné est 16 (16 bits?)
    3 canaux (B, G et R j'imagine)
    Pouvez-vous me dépanner avec un exemple simple?
    Merci et bonne journée

    Comme j'ai fouillé ces 3 pistes, je ne sais plus trop où j'en suis, alors je veux repartir du début.

    Quelqu'un peut-il m'indiquer une manière simple, et m'aider à la mettre en oeuvre???

    Merci et bonne journée

  2. #2
    Membre du Club
    Homme Profil pro
    Ingénieur c++ junior
    Inscrit en
    Mai 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur c++ junior
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2013
    Messages : 35
    Points : 41
    Points
    41
    Par défaut
    Bonjour,
    Tout d'abord il y a plusieurs types disponibles dans OPENCV, chacun correspond à un define par exemple : CV_8UC1 qui correspond aux données présentes dans une image monochrome ( 1 canal ) où chaque pixel est codé sur un unsigned int (8bits). On peut aussi trouve le CV_32FC2 où chaque pixel est composé de deux canaux contenant des float 32..
    Les types que tu utilisera dépendront des algorithmes d'opencv que tu veux utiliser, certain te demanderont des valeurs en float compris entre 0 et 1, d'autre des valeurs RGB entre 0 et 255 etc...
    Je t'encourage à lire la documentation d'opencv sur les mats
    http://docs.opencv.org/3.1.0/d3/d63/classcv_1_1Mat.html
    Pour accéder aux données je t'envoie vers ce post que je trouve bien fait et explicite :
    http://www.learnopencv.com/parallel-...using-foreach/
    Psykomusic

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 114
    Points : 53
    Points
    53
    Par défaut
    Merci psykomusic,

    j'ai résolu mon problème, d'une part en utilisant le bon type CV_16UC3 dans la déclaration du MAT, puis <char> dans l'appel du .at, puis recast (int) dans le cout !!
    Puis j'ai vu ta réponse.
    Merci pour le lien sur la classe MAt, j'ai qqfois du mal à trouver le bon doc à consulter.

    Le second lien est très utile, d'autant que je bosse sur une cible limitée en puissance et que l'appli doit retourner des résultats sans trop trainer.
    je constate donc que le .at est très lent. Je vais finir d'implémenter la fonction et voir la répercussion sur le temps d'exécution ... la solution du forEach étant très séduisante en terme de tps d'exécution


    bonne journée

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur c++ junior
    Inscrit en
    Mai 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur c++ junior
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2013
    Messages : 35
    Points : 41
    Points
    41
    Par défaut
    Bonjour,
    La docs OpenCV est assez bien faite et le doxygène est complet.
    pour les types voir ici : http://docs.opencv.org/3.1.0/db/de0/...51244bd3c01b9b
    Et pour le reste voir là http://docs.opencv.org/3.1.0/.
    Ravi d'avoir pu t'aider.
    Bonne journée,
    Psykomusic

Discussions similaires

  1. [Débutant] Afficher les composantes RGB d'une image dans un repère (R, G, B)
    Par AchèresXV dans le forum Images
    Réponses: 4
    Dernier message: 16/10/2014, 10h19
  2. lire les données d'un fichier text dans un vecteur
    Par kruskal21 dans le forum MATLAB
    Réponses: 5
    Dernier message: 11/01/2011, 17h52
  3. Réponses: 1
    Dernier message: 12/05/2009, 18h28
  4. Lire les mails d'un serveur Exchange dans une page php
    Par ljonathan dans le forum Langage
    Réponses: 2
    Dernier message: 18/08/2008, 11h48
  5. [VB.NET] Lire les dates d'une bd access dans un form Vb.net
    Par Herlece dans le forum Accès aux données
    Réponses: 6
    Dernier message: 03/01/2006, 09h38

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