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

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

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

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

Камера действительно отображается как video0 в dev/, а также в [email protected]:~#lsusb, как [email protected]:~#lsusb ниже,

[email protected]:~# 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, так что это может показаться глупым, и я заранее прошу прощения за это.

Ответ 1

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)

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

Ответ 2

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

pip install opencv-python

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

Ответ 3

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

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

    ls -la/dev/video*

    Вы можете получить такой же вывод, как показано ниже (вы можете получить видео1, если у вас несколько камер). Как вы можете видеть, только пользователь 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>

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

Ответ 4

Сначала Если вы пытаетесь захватить видео, то cam.open() не подходит для этого. open() инициализирует объект камеры (в данном случае "кулачок").

Во-вторых, здесь cam.open() возвращает false, потому что cv не может инициализировать объект cam. Метод VideoCapture() уже инициализирует объект вашей камеры. Вы можете проверить это, добавив

cam.isOpened()

сразу после

cam.VideoCapture(0)

который вернет "Истину".

В-третьих, если вы хотите связать камеру, это обычный способ сделать это

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()

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

cap.read() возвращает bool (True/False). Если кадр читается правильно, он будет True. Иногда кепка может не инициализировать захват. В этом случае код показывает ошибку. Вы можете проверить, инициализирован ли он или нет методом 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

Ответ 8

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

Ответ 9

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