cv2.VideoCapture.open () всегда возвращает FALSE

Я пытаюсь получить доступ к веб-камере Logitech c310 на моем beaglebone. Он всегда возвращает false для любого идентификатора устройства, я не знаю почему.

Я использую следующий код.

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

Камера отображается как video0 в dev /, а также в root@arm:~#lsusb, как показано ниже,

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

Я также мог получить доступ к камере с v4l2-ctl. Обратите внимание, что я новичок в OpenCV, поэтому это может показаться глупым, и я заранее извиняюсь за это.


person user26641    schedule 15.02.2014    source источник
comment
Попробуйте использовать другие индексы, например -1 или 1, т.е. cam=cv2.VideoCapture(-1)   -  person Abid Rahman K    schedule 15.02.2014
comment
Пробовал оба, даже 2. Не работают.   -  person user26641    schedule 15.02.2014


Ответы (8)


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

если вы получаете такую ​​ошибку, возможно, что-то не так с индексацией.

вместо cv2.VideoCapture (0) добавить:

cv2.VideoCapture(-1)

это даст вам первую рабочую камеру. И если что-то пойдет не так, просто опубликуйте трассировку стека здесь, и я посмотрю, смогу ли я вам помочь :)

person kaushik94    schedule 17.02.2014
comment
Кажется, счетчик интуитивно понятен, но замена 0 на -1 устранила ошибку для меня. - person bakalolo; 13.08.2016
comment
@bakalolo Я знаю, я читал его документацию несколько раз, но индексная часть там еще не ясна или, возможно, мне что-то не хватает. Вопрос только в том, какое устройство подобрать. так что, возможно, он не может найти нужное устройство по индексу 0. при использовании -1 по умолчанию выполняется переход к первой найденной рабочей камере. - person kaushik94; 21.03.2017

Функции, связанные с видео, не поддерживаются (не скомпилированы с помощью FFmpeg), если cv2 был установлен из колеса pypi:

pip install opencv-python

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

person Community    schedule 28.01.2017
comment
Это все еще правильно? На странице, которую вы связали, говорится, что все колеса поставляются с FFmpeg под лицензией LGPLv2.1. Зачем им поставляться с FFmpeg, если он не поддерживается колесом? - person Jim Pfleger; 27.05.2018
comment
Версии Linux теперь компилируются с помощью FFmpeg, поскольку github.com/skvark/opencv-python/ Release / tag / 11 Хотя IIRC, он не работал у меня примерно до последней версии 3.4.1.15 - person Hal; 05.07.2018

Я встретил аналогичную проблему. Это может быть связано с разрешением пользователя. Попробуйте выполнить следующую процедуру для диагностики проблемы.

  1. Выполните следующую команду, чтобы определить разрешение на доступ к камере.

    ls -la /dev/video*

    Вы можете получить аналогичный результат, как показано ниже (вы можете получить video1, если у вас несколько камер). Как видите, только root пользователь и пользователи в video группе имеют разрешение на доступ к камере.

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

  2. Итак, исправление простое, добавьте свою учетную запись пользователя в группу video, используя следующую команду:

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

Надеюсь, это поможет!

person Mingjiang Shi    schedule 28.01.2019

Если вы не смогли решить эту проблему разными способами, вы можете
найти и установить "opencv3.2.0-dev", я использую его для решения
проблемы дважды.
просто pip install opencv-python недостаточно. (хм,
по крайней мере, иногда)

person Song    schedule 16.06.2017

Это зависит от аргумента, передаваемого в cv2.VideoCapture ().

Обычно это 0, если основная веб-камера вашего компьютера работает. Точно так же, если вы хотите получить доступ ко второй камере, установленной в вашей системе, передайте аргумент как 2.

Но если у вас только 1 камера и индексирование «0» не помогает, попробуйте вместо этого передать индекс как -1.

person Dragon    schedule 16.06.2017

Я нашел кое-что в документации, что может просто помочь.

cap.read () возвращает логическое значение (Истина / Ложь). Если кадр прочитан правильно, он будет True. Иногда cap может не инициализировать захват. В этом случае код показывает ошибку. Проверить, инициализирован он или нет, можно методом cap.isOpened (). Если это правда, ОК. В противном случае откройте его с помощью cap.open ().

Источник: http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_video_display/py_video_display.html#display-video

person Ashish Gupta    schedule 23.05.2018

Для меня решением было перезагрузить компьютер, похоже, что при освобождении камеры произошла ошибка. Мне это не нравится, хотя кажется, что это не окончательное решение. Но могло случиться так, что это была проблема с ноутбуком jupyter, теперь я работаю со spyder, так как я читал, что jupyter более подвержен проблемам.

person Jorge    schedule 05.09.2019

Дело в недостающих пакетах. После установки OpenCV я установил кучу пакетов. Я снова запустил cmake, и он сработал.

person user26641    schedule 19.05.2014