USB 摄像头不适用于 opencv 和树莓派

问题描述 投票:0回答:1

我无法让 opencv 检测我的 USB 摄像头。当我使用其他工具时,系统似乎可以检测甚至拍照,但使用 opencv 时它不起作用。

当我列出 USB 设备时:

lsusb

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 258a:002a SINO WEALTH Gaming KB 
Bus 001 Device 005: ID 18f8:0f97 [Maxxter] Optical Gaming Mouse [Xtrem]
Bus 001 Device 004: ID 214b:7250 Huasheng Electronics USB2.0 HUB
Bus 001 Device 003: ID 214b:7250 Huasheng Electronics USB2.0 HUB
Bus 001 Device 010: ID 05a3:9230 ARC International Camera
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

当我尝试使用 fswebcam 用相机捕获图像时,它工作得很好。

fswebcam -r 1280x720 --no-banner test.jpg

--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Disabling banner.
Writing JPEG image to 'test.jpg'.

但是当我尝试使用 opencv 捕获图像时:

我尝试过/dev/videox

>>> import cv2
>>>
>>> cam = cv2.VideoCapture('/dev/video0')
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (1824) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module source reported: Could not read from resource.
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (914) open OpenCV | GStreamer warning: unable to start pipeline
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (501) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created

还有号码

>>> import cv2
>>> 
>>> cam = cv2.VideoCapture(0)
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (961) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
>>> 

我正在使用:

  • Raspberry Pi 4 B 型修订版 1.5
  • 树莓派
  • python 3.9.2
  • 点23.2.1
  • python3-opencv==4.5.1(使用“sudo apt install python3-opencv”)

(观察:我无法使用 pip opencv-python 安装 opencv)

python opencv raspberry-pi usb usb-camera
1个回答
0
投票

好吧,我找到了一个适合我的解决方案。我必须在VideoCapture中指定视频api,使用V4L2 api,最终代码如下所示:

camera = cv2.VideoCapture(0, cv2.CAP_V4L2)

我希望它可以帮助有同样问题的人:)

© www.soinside.com 2019 - 2024. All rights reserved.