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 :

IplImage par socket


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 37
    Par défaut IplImage par socket
    Bonsoir à tous,

    Je réalise une appli (C++) de type CLIENT/SERVEUR utilisant les sockets nottement le protocole TCP/IP en mode connecté. Cela fait quelques jours que je bloque sur un point, je souhaite envoyer une capture de CAM via TCP.

    on a donc d'un coté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CvCapture* capture=cvCaptureFromCAM(0);
    IplImage* image=cvRetrieveFrame(capture);
    et d'un autre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    send(sock1,buffer,sizeof(buffer),0);
    et mon probleme vien donc de la conversion IplImage --> Buffer
    biensur une Union ou un memcpy aurait été bien trop facile mais vu le contenue de la strucutre ( type standrad et pointeur ) j'ai un peut de mal.

    Pourriez vous m'eclairer a ce sujet.

  2. #2
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 37
    Par défaut
    j'ai avancé un peut dans mon projet, mais je continue a bloquer sur un point. je réexplique les grandes lignes de l'application.

    • le client capture des images issue d'une WebCAM, et les transmet au serveur.

    • le serveur renvoie un "accusé" de la reception de l'image indiquant au client qu'il peut renvoyé une autre image


    mon problème est que du coté du client comme du serveur, l'envoie des images marche nikel, (j'arrive à les sauvé sur le HDD pour verification) mais je n'arrive pas a les afficher, la fenetre reste grise.

    ma boucle coté client est:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    while(buffer_retour[0]==1) 
    {
     
    frame = cvQueryFrame(capture); 
    cvShowImage("TEST",frame);
    image=frame;
     
     
    int temp=0;				
     
    unsigned char* data=reinterpret_cast<unsigned char*>(image->imageData);
     
    	for(int i=0; i<(image->height);i++)
    	{
    		for(int j=0;j<(image->width);j++)
    		{
                            // on recupere les donnée de l'image
    		temp=3*j+3*image->width*i;
    		buffer.tab[80+temp]=data[0+temp]; 
    		buffer.tab[81+temp]=data[1+temp];
    		buffer.tab[82+temp]=data[2+temp];
    		}
    	}
     
    // on copie tout le reste dans le buffer
    buffer.image.align=image->align; 
    buffer.image.dataOrder=image->dataOrder;
    buffer.image.depth=image->depth;
    buffer.image.height=image->height;
    buffer.image.ID=image->ID;
    buffer.image.imageSize=image->imageSize;
    buffer.image.nChannels=image->nChannels;
    buffer.image.nSize=image->nSize;
    buffer.image.origin=image->origin;
    buffer.image.width=image->width;
     
               	if (is_connected!=0)
                {
                    int Socket_error=3;
    	   break;
    	}
               else if ( is_connected==0 && buffer_retour[0]==1 )
     
    	{
    		MessageBeep(-1);
    		cvShowImage("TEST",image);
    		send(s,buffer.tab,sizeof(buffer.tab),0);
    		buffer_retour[0]=0;
                }
     
    	recv(s,buffer_retour,sizeof(buffer_retour),0);
     
    	if(buffer_retour[0]!=1)break;
    }
    et coté serveur


    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    while (reception=recv(s_client,buffer.tab,sizeof(buffer.tab),0))
    {
     
    cvShowImage("TEST2",RECimage2);
     
     
    RECimage=cvCreateImage(size, buffer.image.depth, buffer.image.nChannels); 
    RECimage->align=buffer.image.align;
    RECimage->dataOrder=buffer.image.dataOrder;
    RECimage->nSize=buffer.image.nSize;
    RECimage->ID=buffer.image.ID;
    RECimage->height=buffer.image.height;
    RECimage->width=buffer.image.width;
    RECimage->origin=buffer.image.origin;
    RECimage->imageSize=buffer.image.imageSize;
     
    memcpy(ImageDonnee,buffer.image.imageData,sizeof(buffer.image.imageData));
     
    char* Data=ImageDonnee;
    RECimage->imageData=Data;
    RECimage->imageDataOrigin=Data;
    MessageBeep(MB_ICONEXCLAMATION);
    RECimage2=RECimage;
     
    char buffer_retour[1];
    buffer_retour[0]=1;    // on a bien reçu l'image
    if(reception==sizeof(buffer.tab)) send(s_client,buffer_retour,sizeof(buffer_retour),0);

Discussions similaires

  1. Problème de communication par sockets
    Par Linio dans le forum Entrée/Sortie
    Réponses: 33
    Dernier message: 06/05/2006, 18h50
  2. Ouverture de connexion et envoi d'un message par socket
    Par loleske dans le forum C++Builder
    Réponses: 3
    Dernier message: 10/02/2005, 12h52
  3. Transfert de fichiers par sockets
    Par Kaori dans le forum C++
    Réponses: 19
    Dernier message: 26/01/2005, 13h58
  4. [Socket] Envoi de texte et d'objets par socket
    Par ced dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 05/08/2004, 09h07
  5. [Débutant] Envoi de fichier par socket
    Par zapho dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 26/05/2004, 18h58

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