Webcam en C#
Je fais un programme en C# pour se connecter à une webcam et de faire un peu de manipulation de l'image avec elle.
Je dispose d'une application qui utilise l'api win32 (avicap32.dll pour vous connecter à la webcam et envoyer des messages qu'il envoie à la presse-papiers. Le problème est que, tout accessible à partir de la peinture, de la lecture sur les résultats du programme de pointeurs null.
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 c'est 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);
Theres certains vérification des erreurs que j'ai supprimé du code pour le rendre plus court.
Merci d'avance 🙂
Vous devez vous connecter pour publier un commentaire.
J'ai récemment commencé à faire des passe-temps dans ce domaine.
Nous nous sommes installés sur l'utilisation de la OpenCV de la bibliothèque avec la opencvdotnet wrapper. Il prend en charge la capture d'images à partir d'une webcam:
Et si vous êtes en train de faire de la manipulation d'image, OpenCV est algorithmes de traitement d'image ont été enveloppés dans le OpenCVDotNet.Algs assemblée.
Si vous décidez d'aller dans cette voie assurez-vous d'installer OpenCV version 1.0 (et l'installer "c:\program files\opencv" si vous êtes sur Vista 64 bits, ou "mklink OpenCV 'c:\program files (x86)\OpenCV`" dans le bon répertoire ou d'autre opencvdotnet ne sera pas installé).
Il y a deux façons d'obtenir les données de la caméra dans votre application, DirectShow et WIA. Microsoft vous recommande d'utiliser WIA, et l'interface WIA est assez simple pour envelopper votre cerveau autour de. J'ai créé et publié un open source WIA bureau bibliothèque basé sur le travail que j'ai fait il y a longtemps.
Maintenant, le problème avec WIA, dans certains cas, c'est que c'est trop simple. Par exemple, si vous souhaitez modifier les propriétés de l'appareil photo (comme le taux d'armature, la résolution, etc) puis WIA tombe. Microsoft obsolète DirectShow, mais ils n'ont vraiment pas de nous donner de remplacement qui a toutes ses capacités, et j'ai trouvé qu'il continue à bien fonctionner sur toutes les plateformes existantes (c'est très bien établie, donc je ne peux pas imaginer soutien pour aller plus loin tout moment bientôt).
Il ya une très bonne DirectShow bibliothèque de plus sur SourceForge. Le seul "problème" c'est qu'il est vraiment complexe et qui provient du fait que DShow est juste tellement complexe et déroutant à la première place. Il y a beaucoup de choses que le wrapper permet de faire qui ne sont pas seulement facile à travailler, mais ils ne fournissent des échantillons pour un grand nombre de cas d'utilisation courante comme l'affichage vidéo ou capture d'une image. Si vous souhaitez ajouter des superpositions, ou insérer d'autres filtres, il peut le faire, mais soyez prévenus que ce n'est pas du tout simple.
Prendre un coup d'oeil à cet article:
http://www.codeproject.com/KB/miscctrl/webcam_c_sharp.aspx
Il est trop simple que l'installation et l'utilisation OpenCVNetWrapper.
Avez-vous essayé le presse-papiers.GetImage()? Vous pouvez également essayer les divers presse-papiers.Contient*() permettent de voir quel format les données sont stockées dans le presse-papiers.
OpenCV capture, EMGU de capture et de tous les autres capture des bibliothèques, j'ai essayé
tous ont le même problème: Vous ne pouvez pas aller plus haut que 640x480 par programmation
(sans ouvrir les fenêtres de la source vidéo de la fenêtre).
Je vous suggérons d'utiliser ce (qui fonctionne):
https://github.com/ofTheo/videoInput
Cela a également été demandé dans Comment obtenir une web cam images en C#? et vous pouvez trouver les informations suivantes utiles (Désolé pour le spam, mais cela aide vraiment à répondre à la question):
J'ai juste sorti le compléter le code source de mon application Windows CamTimer (écrit en .NET/C#). Télécharger/visualiser le code complet (avec Webcam), exemples à https://github.com/johanssonrobotics/CamTimer
Bon codage!