2009-06-02 7 views
1

J'ai cette caméra vidéo USB de type jardin, et elle est livrée avec deux mini-applications, une qui vous permet juste de voir ce que voit la caméra, et une qui enregistre sur un fichier .avi.Comment lire une caméra vidéo dans un programme win32 C

Mais quelle est l'API si je veux saisir des images de la caméra dans mon propre programme C? Je fais les hypothèses qu'il est (1) possible et (2) souhaitable de faire un peu d'appel et un tableau 2D d'informations de pixel rempli.

Ce que je veux faire est de bricoler avec des algorithmes de traitement d'image, et pour cela j'aimerais vraiment avoir mon code autour de certaines données en direct.

EDIT -

Ayant eu une exposition saine à Linux, je peux comprendre comment (idéalement/en théorie), vous pouvez ouvrir() le dispositif, utilisez ioctl() pour le configurer, et lire() les données . Et je suis pratiquement certain que ce n'est pas ainsi que Windows présentera l'API. Ne sachant pas quels noms de fonctions Windows pourraient utiliser pour une API de périphérique vidéo, ou même s'il en a un, rend difficile la recherche, au moins avec les capacités de recherche d'api win32 que j'ai à ma disposition.

Répondre

1

Vous aurez probablement besoin de l'API DirectShow, à condition que ce soit le fonctionnement de la caméra. Si le fabricant a créé son propre chemin de code, vous aurez besoin de son API.

0

L'API est la voie à suivre. Une bonne indication de la nécessité d'une caméra sur mesure ou non est de voir si elle est reconnue par un PC sans que les applications du fabricant soient installées. Si Windows a les pilotes intégrés dans le, vous devriez être en mesure d'utiliser les API Windows pour capturer les images. Sinon, si vous savez quel codec de compression a été utilisé pour le fichier AVI, vous pouvez le décompresser.

Idéalement, il serait bon si vous pouviez capturer la vidéo en format natif (YUV, RGB15 ou similaire), car alors vous pouvez travailler sur la compression ainsi que la manipulation.

1

Votre première étape, comme l'a souligné ChrisBD, est de vérifier si Windows prend en charge votre appareil.

Si tel est le cas, vous avez trois API Windows possibles pour la capture:

  • DirectShow
  • VFW. A plus ou moins été remplacé par DirectShow
  • MediaFoundation. Est l'API la plus récente destinée à remplacer DirectShow. AFAIK pas encore entièrement mis en œuvre et seulement disponible dans Vista.

De trois DirectShow est le meilleur choix. Cependant, apprendre et utiliser DirectShow n'est pas une tâche triviale. Un excellent exemple peut être trouvé here.

Une autre possibilité est d'utiliser OpenCV. OpenCV est une bibliothèque de traitement d'image, que vous pouvez également utiliser pour traiter les images. OpenCV a une API de capture d'image qui fournit une abstraction plus simple et est plus facile à utiliser que les API Windows.

Questions connexes