Question

Je crée un programme en C # pour me connecter à une webcam et manipuler certaines images avec celle-ci. J'ai une application de travail qui utilise une API win32 (avicap32.dll) pour se connecter à la webcam et lui envoyer des messages l'envoyant dans le Presse-papiers. Le problème est que, bien qu’elle soit accessible depuis la peinture, sa lecture dans le programme donne des pointeurs nuls.

C'est le code que j'utilise pour connecter la webcam:

mCapHwnd = capCreateCaptureWindowA("WebCap", 0, 0, 0, 320, 240, 1024, 0);

SendMessage(mCapHwnd, WM_CAP_CONNECT, 0, 0);
SendMessage(mCapHwnd, WM_CAP_SET_PREVIEW, 0, 0);

Et voici ce que j'utilise pour copier l'image dans le presse-papiers:

SendMessage(mCapHwnd, WM_CAP_GET_FRAME, 0, 0);

SendMessage(mCapHwnd, WM_CAP_COPY, 0, 0);
tempObj = Clipboard.GetDataObject();
tempImg = (System.Drawing.Bitmap)tempObj.GetData(System.Windows.Forms.DataFormats.Bitmap);

Il y a des erreurs de vérification que j'ai supprimées du code pour le raccourcir.

Merci d'avance :)

Était-ce utile?

La solution

J'ai récemment commencé à faire du passe-temps dans ce domaine.

Nous avons opté pour la bibliothèque OpenCV avec le opencvdotnet . Il prend en charge la capture d'images à partir d'une webcam:

using (var cv = new OpenCVDotNet.CVCapture(0))
{
    var image = cv.CreateCompatibleImage();
    // ...
    cv.Release();
}

Et si vous manipulez des images, les algorithmes de traitement des images d'OpenCV ont été intégrés à l'assemblage OpenCVDotNet.Algs.

Si vous décidez de suivre cette voie, veillez à installer OpenCV version 1.0 (et installez-le dans "c: \ programme fichiers \ opencv" si vous utilisez Vista 64 bits ou dans "mklink OpenCV 'c: \ fichiers de programme (x86) \ OpenCV` "du répertoire correct ou sinon opencvdotnet ne sera pas installé).

Autres conseils

Il existe en réalité deux méthodes pour importer des données de caméra dans votre application, DirectShow et WIA. Microsoft vous recommande d’utiliser WIA et l'interface de WIA est relativement simple. pour envelopper votre cerveau autour. J'ai créé et publié une bibliothèque de postes de travail WIA ouverte basée sur le travail Je l'ai fait il y a quelque temps.

Le problème avec WIA, dans certains cas, est que c'est trop simple. Par exemple, si vous souhaitez ajuster les propriétés de la caméra (telles que la fréquence d'images, la résolution, etc.), WIA tombe. DirectShow est obsolète pour Microsoft, mais ils ne nous ont pas fourni de solution de remplacement offrant toutes ses fonctionnalités, et j’ai constaté qu’il continue de fonctionner correctement sur toutes les plates-formes existantes (il est très enraciné, je ne peux donc pas imaginer que le support disparaisse). dans peu de temps).

Il existe une très bonne bibliothèque DirectShow sur SourceForge . Le seul " problème " avec ça, c’est vraiment complexe et cela tient au fait que DShow est tellement complexe et déroutant au départ. Le wrapper peut effectuer beaucoup de choses difficiles à résoudre, mais il fournit des exemples pour de nombreux cas d'utilisation courants, tels que l'affichage de vidéos ou la capture d'une image. Si vous souhaitez ajouter des superpositions ou insérer d'autres filtres, vous pouvez le faire, mais sachez que ce n'est pas du tout simple.

Regardez cet article: http://www.codeproject.com/KB/miscctrl/webcam_c_sharp.aspx

C’est beaucoup plus simple que d’installer et d’utiliser OpenCVNetWrapper.

Avez-vous essayé Clipboard.GetImage ()? Vous pouvez également essayer les différentes méthodes Clipboard.Contains * () pour voir le format dans lequel les données sont stockées.

Capture OpenCV, capture EMGU et toutes les autres bibliothèques de capture que j'ai essayées
Tous ont le même problème: vous ne pouvez pas dépasser 640x480 par programmation
(sans ouvrir la fenêtre de source vidéo Windows).

Je suggère d'utiliser ceci (ce qui fonctionne):
https://github.com/ofTheo/videoInput

Cette question a également été posée dans Comment obtenir des images de webcam en C # ? et vous trouverez peut-être utile ce qui suit (désolé pour le spam, mais cela aide vraiment à répondre à la question):

Je viens de publier le code source complet de mon application Windows CamTimer (écrit en .NET / C #). Téléchargez / affichez le code complet (avec des exemples de webcam fonctionnels) à l'adresse https://github.com/johanssonrobotics/CamTimer

Joyeux codage!

scroll top