Tableau d'une image venant d'une webcam [Résolu]

cs_doggyk 21 Messages postés lundi 6 septembre 2004Date d'inscription 12 mars 2005 Dernière intervention - 4 oct. 2004 à 11:21 - Dernière réponse : martinbrochet 33 Messages postés jeudi 24 avril 2003Date d'inscription 25 mai 2005 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

12 réponses

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

Magic Nono: l'informagicien! 8-)

Merci magic_Nono 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Commenter la réponse de magic_Nono
Meilleure réponse
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 4 oct. 2004 à 11:49
3
Merci
Regarde GetClipboardData() dans MSDN.

ciao...
BruNews, MVP VC++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Commenter la réponse de BruNews
Meilleure réponse
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 5 oct. 2004 à 11:40
3
Merci
GetModuleHandle(0) donne handle du prog donc instance du VB en cours.

ciao...
BruNews, MVP VC++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Commenter la réponse de BruNews
DeAtHCrAsH 2674 Messages postés vendredi 25 janvier 2002Date d'inscription 6 février 2013 Dernière intervention - 4 oct. 2004 à 15:00
0
Merci
A l'inverse penses aussi a regarder SetClipboardData() dans MSDN.

Shell
Commenter la réponse de DeAtHCrAsH
cs_doggyk 21 Messages postés lundi 6 septembre 2004Date d'inscription 12 mars 2005 Dernière intervention - 5 oct. 2004 à 11:34
0
Merci
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.
Commenter la réponse de cs_doggyk
cs_doggyk 21 Messages postés lundi 6 septembre 2004Date d'inscription 12 mars 2005 Dernière intervention - 7 oct. 2004 à 17:03
0
Merci
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.
Commenter la réponse de cs_doggyk
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 7 oct. 2004 à 17:11
0
Merci
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++
Commenter la réponse de BruNews
martinbrochet 33 Messages postés jeudi 24 avril 2003Date d'inscription 25 mai 2005 Dernière intervention - 14 avril 2005 à 19:31
0
Merci
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
Commenter la réponse de martinbrochet
cs_doggyk 21 Messages postés lundi 6 septembre 2004Date d'inscription 12 mars 2005 Dernière intervention - 15 avril 2005 à 10:22
0
Merci
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.
Commenter la réponse de cs_doggyk
martinbrochet 33 Messages postés jeudi 24 avril 2003Date d'inscription 25 mai 2005 Dernière intervention - 15 avril 2005 à 10:57
0
Merci
merci d'avance tu enregistrai une image en mémoire avec ta class??
Commenter la réponse de martinbrochet
cs_doggyk 21 Messages postés lundi 6 septembre 2004Date d'inscription 12 mars 2005 Dernière intervention - 27 avril 2005 à 14:29
0
Merci
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);

}
Commenter la réponse de cs_doggyk
martinbrochet 33 Messages postés jeudi 24 avril 2003Date d'inscription 25 mai 2005 Dernière intervention - 28 avril 2005 à 09:37
0
Merci
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
Commenter la réponse de martinbrochet

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.