web-dev-qa-db-fra.com

cv2.VideoCapture.open () renvoie toujours FALSE

J'essaie d'accéder à une webcam Logitech C310 sur mon Beaglebone. Il renvoie toujours false pour n'importe quel ID de périphérique, je ne sais pas pourquoi.

J'utilise le code suivant.

>>> import cv2, numpy as np
>>> cam = cv2.VideoCapture(0)
>>> cam.open(0)
False

La caméra apparaît en tant que video0 dans dev/et aussi dans root@arm:~#lsusb, comme ci-dessous,

root@arm:~# lsusb
Bus 001 Device 002: ID 046d:081b Logitech, Inc. Webcam C310
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Je pouvais aussi accéder à la caméra avec v4l2-ctl. Notez que je suis très nouveau sur OpenCV, cela peut donc sembler idiot et je m'en excuse par avance.

13
user26641

la fonctionnalité vidéo n'est pas prise en charge (non compilée avec FFmpeg), si cv2 a été installé à partir de la roue pypi:

pip install opencv-python

https://pypi.python.org/pypi/opencv-python

11
user1203652
HIGHGUI ERROR: V4L: index 1 is not correct!
False
OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array  type) in cvGetMat, file /home/kaushik/Desktop/OpenCV-2.4.1/modules/core/src/array.cpp, line 2482
Traceback (most recent call last):
File "x2.py", line 8, in <module>
cv2.imshow('frame', frame)
cv2.error: /home/kaushik/Desktop/OpenCV-2.4.1/modules/core/src/array.cpp:2482: error: (-206) Unrecognized or unsupported array type in function cvGetMat

si vous obtenez ce type d'erreur, il est probable que quelque chose ne va pas avec l'indexation.

au lieu de cv2.VideoCapture (0) ajouter:

cv2.VideoCapture(-1)

cela vous donnera la première caméra en état de marche ... Et si quelque chose ne va pas, il suffit de poster la trace de pile ici et je verrai si je peux vous aider :)

10
kaushik94

J'ai rencontré le même problème. Cela peut être lié à la permission de l'utilisateur. Essayez d’utiliser la procédure suivante pour diagnostiquer le problème.

  1. Exécutez la commande suivante pour déterminer l'autorisation d'accès à la caméra.

    ls -la /dev/video*

    Vous pouvez obtenir une sortie similaire à celle décrite ci-dessous (vous pouvez obtenir la vidéo 1 si vous avez plusieurs caméras). Comme vous pouvez le constater, seuls les utilisateurs root et les utilisateurs du groupe video ont le droit d'accéder à la caméra.

    crw-rw----. 1 root video 188, 0 Apr 3 21:16 /dev/video0

  2. Donc, le correctif est simple, ajoutez votre compte utilisateur au groupe video, en utilisant la commande suivante:

    Sudo usermod -a -G video <you login name>

J'espère que ça aide!

0
Mingjiang Shi

Cela dépend de l'argument transmis à cv2.VideoCapture ().

Normalement, c’est 0 pour faire fonctionner la webcam principale de votre pc. De même, si vous souhaitez accéder à une deuxième caméra installée sur votre système, transmettez l’argument en tant que 2.

Mais si vous n'avez qu'une seule caméra et que l'indexation «0» ne vous aide pas, essayez de passer l'index sous la forme -1.

0
Biswa_9937

Tout d'abord, si vous essayez de capturer une vidéo, alors cam.open () n'est pas la bonne façon de le faire. La méthode open () initialise l'objet caméra (dans ce cas, la "cam").

Deuxièmement, cam.open () renvoie false car cv n'est pas en mesure d'initialiser l'objet cam. La méthode VideoCapture () initialise déjà votre objet caméra . Vous pouvez le vérifier en ajoutant 

cam.isOpened()

juste après

cam.VideoCapture(0)

cela retournera "True".

Troisièmement, si vous voulez vider le flux de la caméra, c’est la manière conventionnelle de le faire.

import cv2

cam = cv2.VideoCapture(0)
print cam.isOpened()

while(True):
        ret, frame = cam.read()
        cv2.imshow('frame', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

cam.release()
cv2.destroyAllWindows()
0
kaushik94

Si vous ne l'avez pas résolu à bien des égards, vous pouvez essayer de
trouver et installer "opencv3.2.0-dev" , je l'utilise pour résoudre
le problème deux fois.
il suffit de piper installer opencv-python ne suffit pas. (hmm,
au moins parfois)

0
s yh

J'ai trouvé quelque chose dans la documentation qui pourrait bien aider. 

cap.read () renvoie un booléen (vrai/faux). Si frame est lu correctement, ce sera True. Parfois, cap peut ne pas avoir initialisé la capture. Dans ce cas, le code indique une erreur. Vous pouvez vérifier s'il est initialisé ou non par la méthode cap.isOpened (). Si c'est vrai, d'accord. Sinon ouvrez-le avec cap.open ().

Source: http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_video_display/py_video_display.html#display-video

0
Ashish Gupta