OpenCv 错误无法通过视频捕获打开相机

Nab*_*yub 16 python ubuntu opencv video-capture python-3.x

我正在通过 opencv 使用我的摄像头,然后在重新启动后突然运行我的代码,它显示以下错误:

[ WARN:0] global /io/opencv/modules/videoio/src/cap_v4l.cpp (802) open VIDEOIO ERROR: V4L: can't open camera by index 0
Traceback (most recent call last):
  File "test.py", line 20, in <module>
    retval, buffer_img = cv2.imencode('.jpg', frame)
cv2.error: OpenCV(4.1.2) /io/opencv/modules/imgcodecs/src/loadsave.cpp:877: error: (-215:Assertion failed) !image.empty() in function 'imencode'
Run Code Online (Sandbox Code Playgroud)
cap = cv2.VideoCapture(0)  # here it throws an error


import json
while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    retval, buffer_img = cv2.imencode('.jpg', frame)

    resdata = base64.b64encode(buffer_img)

    resdata = "data:image/png;base64,"+ str(resdata.decode("utf-8"))
    PARAMS = {'image': resdata}

    # Our operations on the frame come here
    #gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Display the resulting frame
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

我也试过,cap = cv2.VideoCapture(1)但后来显示找不到相机

我该如何解决这个问题?

小智 15

最有可能的权限问题/dev/video0

检查您是否属于“视频”组。
id -a

如果您在群组列表中没有看到视频,请添加 sudo usermod -a -G video

Ubuntu 用户:(20.04)
sudo usermod -a -G video $LOGNAME

注销并重新登录并尝试。


小智 11

我得到了同样的错误。尝试将 0 更改为 -1

cap = cv2.VideoCapture(-1)
Run Code Online (Sandbox Code Playgroud)

这解决了这个问题。


小智 8

当我创建多个 cv2.VideoCapture(0) 实例时,我遇到了同样的问题。因此,请检查您的代码是否包含多次调用 cv2.VideoCapture(0) 的多个初始化或部分。我在调试模式下运行 Flask 服务器时遇到了这个问题,因为它调用了 cv2.VideoCapture(0) 两次。

import cv2
cap = cv2.VideoCapture(0)
cap2 = cv2.VideoCapture(0)
while True:

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

cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

错误:

python3 debugCamera.py 
[ WARN:0] global /io/opencv/modules/videoio/src/cap_v4l.cpp (887) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
Run Code Online (Sandbox Code Playgroud)


ver*_*eus 5

我遇到了同样的问题,只需将 0 更改为 1,然后更改为 -1,然后再更改回 0。不知道为什么这对我有用。


Soh*_*eza 2

我不会去那部分你想要做什么,这里只是一段代码,可以在每次运行时打开你的相机,

蟒蛇:3.7.3

OpenCV:4.1.0

import cv2
cap = cv2.VideoCapture(0)
while True:

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

cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

  • cap = cv2.VideoCapture(0),它不起作用,它给了我我在开头提到的错误 (3认同)