Tableau d'une image venant d'une webcam

Résolu
cs_doggyk Messages postés 21 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 12 mars 2005 - 4 oct. 2004 à 11:21
martinbrochet Messages postés 33 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 25 mai 2005 - 28 avril 2005 à 09:37
Bonjour!

Je cherche à récupérer des images d'une webcam afin de trouver le centre d'un point lumineux. Ceci doit se faire à une vitesse rapide. Mon objectif est donc de récupérer un tableau contenant les valeurs RGB de chaque pixel de l'image pour en traiter dans une boucle les infos voulues.

J'arrive à récupérer les images d'une webcam mais le problème c'est que les fonctions que j'ai trouvé permettent soit de mettre l'image dans un bmp sur disque (--> je pers du temps!!!) soit de mettre l'image dans un clipboard. Je pense que le pus rapide serait de récupérer directement les valeurs dans le clipboard pour les mettre dans un tableau mais comment faire?????

Si quelqu'un connait le principe ou une autre astuce... Merci!
Doggyk.

12 réponses

magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
4 oct. 2004 à 11:39
travaille avec des pointeurs sur le clipboard

Magic Nono: l'informagicien! 8-)
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 oct. 2004 à 11:49
Regarde GetClipboardData() dans MSDN.

ciao...
BruNews, MVP VC++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 oct. 2004 à 11:40
GetModuleHandle(0) donne handle du prog donc instance du VB en cours.

ciao...
BruNews, MVP VC++
3
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
4 oct. 2004 à 15:00
A l'inverse penses aussi a regarder SetClipboardData() dans MSDN.

Shell
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_doggyk Messages postés 21 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 12 mars 2005
5 oct. 2004 à 11:34
Merci les gars!
Je vais me pencher dessus...

Par contre, pendant que j'y suis, jai un aure pb:
comme mon prog principal est en vb mais que je veux récupérer mes coordonnées qui sont calculées en C++, j'utilise une dll. Bon, je la crée, je l'appel en Vb et ça marche sauf que dans cette dll je dois faire une connexion à ma webcam et le souci c'est que pour me connecter à la webcam il me faut une fenêtre de capture (capCreateCaptureWindow(.....,hwnd,...)) qui prend pour argument le handle d'une fenêtre... or, avant cela j'essaie donc le très connu CreateWindow(...,HANDLE hInstance,....) afin d'obenir un handle. Or, ce CreateWindow me renvoie un handle NULL.... mais j'avoue que dans une dll je ne sais pas trop quoi mettre comme hInstance... j'ai essayé pas mal de truc mais toujours rien....... si quelqu'un a un début de piste...
Merci!
Doggyk.
0
cs_doggyk Messages postés 21 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 12 mars 2005
7 oct. 2004 à 17:03
Merci de ta réponse mais cela ne marche pas vraiment avec un dll...
quand je fais hGwnd= CreateWindow(....,GetModuleHandle(0)),...), j'ai toujours un retour hGwnd=NULL...
Est-ce que cela provient du fait que je sois dans une dll????
Si tu as la réponse...
Merci.
Doggyk.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 oct. 2004 à 17:11
Essaie en passant le hinstanc de la dll, tu le reçois dans DllMain, faudra l'enregistrer dans DLL_PROCESS_ATTACH.

ciao...
BruNews, MVP VC++
0
martinbrochet Messages postés 33 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 25 mai 2005
14 avril 2005 à 19:31
bonjour je suis intéresse par ton appli qui récupère des image
partir d'une webcam serait il possible de savoir ou tu as trouvé
des info sur la capture d'image via Webcam et directshow ? voir mieu un
exemple de code ou lib ... merci

a bientot j'espere


Martin B
0
cs_doggyk Messages postés 21 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 12 mars 2005
15 avril 2005 à 10:22
Salut!

Finalement, mon appli fonctionne suivant le principe suivant:

Ouverture de la webcam (init driver, etc...) en visual Basic(car mon prog principal était en VB)

Récupération de l'image dans le Clipboard

Récupération de l'image du clipboard grâce à une Dll en C++

Traitements en utilisant OpenCV dans C++



Toutes mes infos on été trouvée ici, sur cppfrance, où j'ai récupéré des sources et tenté de les comprendre.

Néanmoins, j'ai récupéré des classes permettant d'ouvrir les webcams grâce à du C++.

Si je me souviens bien je les avais testé et ça marchait mais je suis pas certain d'avoir gardé mes sources.

Je vais regarder mais là, je n'ai rien sous la main. Je t'envoie cela cet aprem ou le lundi 25.

A+.

Doggyk.
0
martinbrochet Messages postés 33 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 25 mai 2005
15 avril 2005 à 10:57
merci d'avance tu enregistrai une image en mémoire avec ta class??
0
cs_doggyk Messages postés 21 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 12 mars 2005
27 avril 2005 à 14:29
Voici les 2 fichiers que jutilisais. Normalement, je les avais récupéré sur cppfrance.

a+.

Doggyk.



//////////////////////////////////////////////////////////////////////////

//




//

// video_cap.h: Classe pour la capture d'une image BMP (DIB) a partir //

//
d'une webcam.


//

//----------------------------------------------------------------------//

//

By NoNo ©


//

//////////////////////////////////////////////////////////////////////////



#if !defined(AFX_VIDEO_CAP_H__7B9778C2_1EE5_4063_9F70_B89039FDFCCF__INCLUDED_)

#define AFX_VIDEO_CAP_H__7B9778C2_1EE5_4063_9F70_B89039FDFCCF__INCLUDED_



#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#pragma comment(lib,"vfw32.lib") //
INSERTION DE LA LIBRAIRIE &
COMPOSANTS

#include <vfw.h>

//
VIDEO FOR WINDOWS (VFW)



class video_cap

{

public:

char *nom_fichier;

//
pointeur sur chaine de caractere pour le nom du
fichier de sauvegarde

void Option_Affichage(HWND
window); //
Affichage de la fenetre des options affichage

void Option_Source(HWND window);
// Affichage de
la fenetre des options source

void Option_Format(HWND window);
// Affichage de
la fenetre des options format

HWND Connexion(HWND handle_mfc);
// Fonction
pour connecter le driver de la Webcam


void CaptureImage(HWND window);
//
Fonction pour capturer une image en DIB (Device
Independant Bitmap Windows)

video_cap();

//
Constructeur

virtual ~video_cap();

// Destructeur

void Deconnexion(HWND window);

};



#endif // !defined(AFX_VIDEO_CAP_H__7B9778C2_1EE5_4063_9F70_B89039FDFCCF__INCLUDED_)













//////////////////////////////////////////////////////////////////////////////

//





//

// video_cap.cpp: Code de la classe pour la capture d'une image BMP (DIB) //

//
a partir d'une webcam.


//

//--------------------------------------------------------------------------//

//

By NoNo ©


//

//////////////////////////////////////////////////////////////////////////////



#include "stdafx.h"

#include "video_cap.h"



#ifdef _DEBUG

#undef THIS_FILE

static char THIS_FILE[]=__FILE__;

#define new DEBUG_NEW

#endif



//////////////////////////////////////////////////////////////////////

// Construction/Destruction


//

//////////////////////////////////////////////////////////////////////



video_cap::video_cap()

{

}



video_cap::~video_cap()

{



}



//////////////////////////////////////////////////////////////////////

// Capture et sauvegarde de l'image


//

//////////////////////////////////////////////////////////////////////

void video_cap::CaptureImage(HWND window) // le handle utilise est le handle retourne

{


// par la fonction connexion

capGrabFrame(window);

capEditCopy(window);

//capCaptureSingleFrameOpen(window) ;

//capCaptureSingleFrame(window) ;

//capCaptureSingleFrameClose(window) ;

//capFileSaveDIB(window, nom_fichier) ; // sauvegarde avec comme nom le contenu

}


// de nom_fichier



//////////////////////////////////////////////////////////////////////

// Connexion du driver de la webcam


//

//////////////////////////////////////////////////////////////////////

HWND video_cap::Connexion(HWND handle_mfc) // le handle utilise est le handle de la classe Dlg

{


// de la MFC : pour l'avoir :
C...Dlg::m_hWnd

HWND window ;

window = capCreateCaptureWindow("handle", WS_CHILD | WS_VISIBLE, 20, 35, 320, 240, handle_mfc, 1) ;

// ----> X

// |

// |

// v Y

//

// 20 => coordonnee X du coin haut gauche de la fenetre de visualisation (en pixel)

// 35 => coordonnee Y du coin haut gauche de la fenetre de visualisation (en pixel)

// 320 => largeur de la fenetre de visualisation (en pixel)

// 240 => hauteur de la fenetre de visualisation (en pixel)

//

if(!capDriverConnect(window,0)) exit(0) ; // quit si aucun driver trouve

return window ;

// retourne le
handle qui servira pour toutes

}


// les autres
fonctions de la classe





//////////////////////////////////////////////////////////////////////

// Ouvrir la fenetre d'options format


//

//////////////////////////////////////////////////////////////////////

void video_cap::Option_Format(HWND window) // le handle utilisé est le handle retourne

{


// par la fonction connexion

capDlgVideoFormat(window) ;

}



//////////////////////////////////////////////////////////////////////

// Ouvrir la fenetre d'options source


//

//////////////////////////////////////////////////////////////////////

void video_cap::Option_Source(HWND window) // le handle utilise est le handle retourne

{


// par la fonction connexion

capDlgVideoSource(window) ;

}



//////////////////////////////////////////////////////////////////////

// Ouvrir la fenetre d'options affichage

//

//////////////////////////////////////////////////////////////////////

void video_cap::Option_Affichage(HWND window) // le handle utilise est le handle retourne

{


// par la
fonction connexion

capDlgVideoDisplay(window) ;

}



//////////////////////////////////////////////////////////////////////

// Fermer la capture video

//

//////////////////////////////////////////////////////////////////////

void video_cap::Deconnexion(HWND window) // le handle utilise est le handle retourne

{


// par la
fonction connexion

capDriverDisconnect(window) ;

DestroyWindow(window);

}
0
martinbrochet Messages postés 33 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 25 mai 2005
28 avril 2005 à 09:37
merci beaucoup mais j'ai déjà trouvé se code et il est
super génial, et facile d'utilisation je le conseille vivement




Martin B
0
Rejoignez-nous