Comment faire pour capturer des images fixes à partir d'une webcam sous linux
Je suis en train d'écrire en C++/Qt programme pour linux, où je prends une image de photo à partir d'une webcam, de faire quelques transformations à une photo (recadrage, redimensionnement, etc.), et l'enregistrer dans un fichier jpeg.
Mais j'ai rencontré quelques problèmes. Le principal problème est que standart UVC (usb video device class) pilote linux ne prend actuellement pas en charge directe de capture d'image fixe: http://www.ideasonboard.org/uvc/ .
Donc, il y a deux façons possibles de capture d'image. Vous pouvez prendre une image du flux vidéo de la caméra, ou vous pouvez prendre un distinct photo, comme un digital caméra portable. Le deuxième moyen n'est pas pris en charge sous linux pilote uvc, de sorte que la première méthode est la seule façon. Mais le problème, c'est que si vous voulez prendre une image du flux vidéo, la taille de la photo ne peut pas être plus grande que la taille de la vidéo dans la fenêtre de prévisualisation vidéo. Donc, si je veux profiter de 2 mégapixels photo, je dois commencer à videostream avec la taille 1600x1200, ce qui n'est pas tellement à l'aise (Au moins, dans Qt la taille du fichier vidéo dépend de la videopreview la taille de la fenêtre).
Je sais qu'il y a la vidéo pour linux 2 API, qui peut être utile dans cette tâche, mais je ne sais pas comment l'utiliser. Je suis actuellement en apprentissage de gstreamer, mais je ne peux pas maintenant trouver comment faire ce que j'ai besoin de l'aide de ces outils.
Donc, je vous en seront reconnaissants de l'aide. Je pense que ce n'est pas un problème difficile pour les gens qui connaissent Linux, GStreamer, v4l2 API, et d'autres choses spécifiques à linux.
Par ailleurs, le programme sera utilisé uniquement avec webcam Logitech C270 HD.
S'il vous plaît, m'aider. Je ne sais pas ce que l'API ou cadre peut m'aider à le faire. Peut-être que vous connaissez.
Double Possible de Webcam bibliothèque en C sous Linux?
OriginalL'auteur locomotion | 2013-05-04
Vous devez vous connecter pour publier un commentaire.
Malheureusement, le C4V2 appels dans opencv n'a pas de travail pour la capture d'images fixes avec n'importe quel appareil photo, j'ai essayé de sortir de la boîte, en utilisant le pilote UVC.
Pour déboguer le problème que j'ai été jouer avec le fait d'essayer d'accomplir ceci avec du code c d'appel c4v2 directement.
J'ai été jouer avec l'exemple de code trouvé ici. Il utilise la méthode du tirant d'images à partir du flux vidéo.
Vous pouvez le compiler avec:
J'ai expérimenté avec 3 caméras logitech. Le meilleur du lot semble être la Logitech C910. Mais même s'il a des questions importantes.
Voici les problèmes que j'ai rencontrés pour accomplir la même tâche avec ce code.
Il fonctionne presque à chaque fois, avec la largeur et la hauteur de l'ensemble de 1920x1080.
Quand j'ai une requête à d'autres possibilités directement à partir de la ligne de commande en utilisant par exemple:
et j'ai essayer quelques-uns des autres "disponible" de plus petites tailles, il se bloque dans la sélection d'attente pour la caméra de libérer la mémoire tampon.
Aussi, quand j'ai essayer de mettre d'autres tailles directement à partir de la ligne de commande en utilisant par exemple:
Puis vérifier avec
Je trouve qu'il renvoie le bon format de pixel, mais bien souvent pas la bonne taille.
Apparemment, cette caméra qui est cotée à la UVC site comme UVC et donc v4l2 compatible n'est pas à la hauteur. Je soupçonne que c'est tout aussi mauvais pour d'autres caméras. Les deux autres que j'ai essayé ont également été répertorié comme compatible sur le site mais il y avait pire des problèmes.
J'ai fait des tests un peu plus sur le LogitechC910 après que j'ai posté ce. J'ai pensé que je voudrais afficher les résultats dans le cas où il aide à quelqu'un d'autre.
J'ai écrit un script pour tester v4l2 saisie du code mentionné ci-dessus sur tous les formats de la caméra prétend qu'il prend en charge lorsqu'il est interrogé avec v4l2 voici les résultats:
Il s'avère que le réglage par défaut de 640x480 ne fonctionne pas et c'est ce qui est pris au piège de moi et la plupart des autres qui ont posté sur les forums.
Puisque c'est de saisir une image vidéo de la première image il saisit lors du démarrage peut avoir une mauvaise exposition (souvent noir ou presque). Je crois que c'est parce que depuis qu'il est en train d'être utilisé comme une caméra vidéo, il ajuste l'exposition comme il va et ne s'inquiète pas au sujet de la première des cadres. Je crois que cela a aussi pris au piège de moi et d'autres qui ont vu la première image que le noir ou presque noir, et pensé que c'était une erreur. Plus tard, les cadres ont la bonne exposition
Il s'avère que opencv avec wrappers python fonctionne très bien avec cet appareil photo si vous évitez les mines terrestres énumérés ci-dessus et d'ignorer tous les messages d'erreur. Les messages d'erreur sont dues au fait pendant que l'appareil accepte les v4l2 commandes il ne marche pas répondre correctement. Donc, si vous définissez la largeur elle est correctement réglé, mais il répond à un mauvais largeur.
Pour s'exécuter sous opencv avec python wrappers vous pouvez effectuer les opérations suivantes:
OriginalL'auteur Sani Elfishawy
>mplayer -vo png, images 1 télévision:// ne fonctionne pas. Plaine verte de l'image apparaît dans le répertoire d'accueil.
Non, mplayer ne pas utiliser gstreamer pour jouer les médias, mais ils utilisent tous les deux les mêmes bibliothèques sous-jacentes comme le x264 et ffmpeg.
OriginalL'auteur M. Haris Azfar
pourraient donner à un écran vert de sortie de la caméra n'est pas encore prêt.
Vous pouvez essayer d'augmenter le nombre d'images et de choisir un numéro à partir duquel la caméra donne à corriger les images.
OriginalL'auteur Dave
Ce à propos de ce programme?
Cela permettra de capturer une image de la taille maximale autorisée par votre webcam. Maintenant, vous pouvez ajouter des effets ou redimensionner l'image capturée avec Qt. Et OpenCV est très très facile à intégrer avec Qt, 🙂
eh bien, vous devez définir des options pour ouvrir la fonction, tels que la capture de la taille, cadre etc. Alternativement, vous pouvez utiliser GLWidget de montrer la vidéo de la webcam à l'intérieur d'une fenêtre Qt.
OriginalL'auteur Md. Minhazul Haque