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 :

Conversion de cvMat vers unsigned char


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Par défaut Conversion de cvMat vers unsigned char
    bonjour à tous

    je suis un peu nouvelle sur opencv

    j'ai acheté une petite caméra icube (camera usb2) qui permet un trigger externe.

    Mais je dois coder la chose pour créer mon fichier vidéo à partir des données envoyées par le SDK accompagnant la caméra.

    Cette SDK propose la possibilité de coder une fonction callback lorsque les données de l'image sont lues.

    la fonction est signée comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyCallbackFunc(BYTE * pBuffer, long lBufferSize,PVOID pContext )
    étant BYTE défini dans le windef.h comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef unsigned char       BYTE;
    Donc j'aimerais savoir comment je dois faire pour convertir cette chaine pointée par ce pointeur char, vers le type cv::Mat afin d'enregistrer les données vers un fichier .avi à l'aide d'OpenCV

    j'espère que je suis claire dans ma question et que je trouverai des gens avec plus d'expérience que moi avec cette belle biblio!!!

    merci à tous !!!

    je viens de trouver un example de quelque chose qui fonctionnerait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void process_video_frame(const unsigned char* pixels,
                             int width, int height, int step)
    {
        cv::Mat img(height, width, CV_8UC3, pixels, step);
       }
    est-ce comme cela que je peux faire la conversion?

    merci bien à tous

  2. #2
    Membre éclairé Avatar de GabrielD
    Homme Profil pro
    ingénieur de recherche
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur de recherche

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Par défaut
    à priori ça devrait marcher d'après la doc.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Par défaut
    merci beaucoup de ton aide, je vais regarder tout ça!!!


  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Par défaut
    Salut
    je reviens vers toi car lorsque je fais la conversion et que j'affiche l'image obtenue j'obtiens une image toute grise.

    je fais ceci :
    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
     
    long CALLBACK MyCallbackFunc(BYTE * pBuffer, long lBufferSize,PVOID pContext )
    {
     
    	// NOUVEAU PROCESSUS
    	// utilisation de OpenCV pour traiter l'image
    	if(bGrabCallback==true)
    	{
    		cv::Mat imavi(480, 752, CV_8UC3, pBuffer);
     
    		// on affiche l'image
    		bGrabCallback=false;
    		cv::namedWindow("titi");
    		cv::imshow("titi",imavi);
    	}
    	return 42;
    }
    BYTE est un unsigned char

    Je pense que la conversion ne se passe pas bien et je ne sais pas comment faire

    si tu pouvais m'aider ou quelqu'un d'autre merci

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Par défaut
    Citation Envoyé par Garra Voir le message
    Salut
    je reviens vers toi car lorsque je fais la conversion et que j'affiche l'image obtenue j'obtiens une image toute grise.

    je fais ceci :
    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
     
    long CALLBACK MyCallbackFunc(BYTE * pBuffer, long lBufferSize,PVOID pContext )
    {
     
    	// NOUVEAU PROCESSUS
    	// utilisation de OpenCV pour traiter l'image
    	if(bGrabCallback==true)
    	{
    		cv::Mat imavi(480, 752, CV_8UC3, pBuffer);
     
    		// on affiche l'image
    		bGrabCallback=false;
    		cv::namedWindow("titi");
    		cv::imshow("titi",imavi);
    	}
    	return 42;
    }
    BYTE est un unsigned char
    et d'après ce que je lis dans la doc la data passé par la fonction callback est : Color- camera: 24bit/Pixel (RGB24 Data)

    Je pense que la conversion ne se passe pas bien et je ne sais pas comment faire

    si tu pouvais m'aider ou quelqu'un d'autre merci

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Par défaut
    Re-salut

    en fait je viens de me rendre compte de ceci, lorsque je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    cv::Mat mat = cv::Mat(480, 752, CV_8UC3, (void*) pBuffer); 
     
    cv::imwrite("titi.bmp", mat);
     
    // on affiche l'image
    cv::namedWindow("titi");
    cv::imshow("titi",mat);
    L'image titi.bmp est bien créée avec l'image reçue de la vidéo alors qu'à l'écran avec namedWindow et imshow j'ai une fenêtre toute grise!!

    Je suis déjà contente d'obtenir un .bmp mais j'aimerais comprendre

    merci de ton aide

Discussions similaires

  1. Problème de conversion de QString en unsigned char
    Par fgtuio dans le forum Débuter
    Réponses: 2
    Dernier message: 07/07/2012, 01h00
  2. [ODBC] Conversion de SQLWCHAR * vers char *
    Par Abdelkaoui dans le forum C
    Réponses: 7
    Dernier message: 23/02/2008, 12h23
  3. pb conversion unsigned char vers char *
    Par FamiDoo dans le forum C
    Réponses: 11
    Dernier message: 24/08/2006, 18h11
  4. [Clé de registre] Conversion char* vers unsigned char*
    Par The Lord of Nesquik dans le forum C
    Réponses: 7
    Dernier message: 03/07/2006, 23h30
  5. vector<unsigned char> et unsigned char* : conversion ?
    Par zax-tfh dans le forum SL & STL
    Réponses: 5
    Dernier message: 15/01/2006, 10h43

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