'OpenCv error can't open camera through video capture

I was using my cam through opencv and suddenly after restarting I ran my code it shows below error:

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

I also tried with cap = cv2.VideoCapture(1) but then it shows can't find camera

How can I fix this issue?



Solution 1:[1]

I got the same error. Try changing 0 to -1

cap = cv2.VideoCapture(-1)

This solved the issue.

Solution 2:[2]

I got the same problem when I created more than one instance of the cv2.VideoCapture(0). So check if your code contains multiple initializations or sections which call cv2.VideoCapture(0) more than once. I was facing this problem while running the flask server in debug mode because it called cv2.VideoCapture(0) twice.

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

Error:

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

Solution 3:[3]

Most likely a permission issue on /dev/video0.

Check if you are part of "video" group.
id -a

if you don't see video in your group list add sudo usermod -a -G video

for Ubuntu users:(20.04)
sudo usermod -a -G video $LOGNAME

Logout and log back in and try it.

Solution 4:[4]

I've encountered the same issue and attempted several methods like cv2.VideoCapture(-1) or cv2.VideoCapture(1) but without much success.

I succeeded after reading this article and disabling debug-mode

Solution 5:[5]

I will not go to that part What you are trying to do, here is just a block of code that can open your camera every time you run it,

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

Solution 6:[6]

I had the same problem, Just change 0 to 1,then to -1 and back again to 0. Don't know why this worked for me.

Solution 7:[7]

In my case, I just reconnected cam to the usb port, and then it was solved! I think this error is caused by closing the window in the wrong way. Please check if there is any exception on the terminal right after closing the window.

Solution 8:[8]

The OP appears to be operating on a Raspberry PI. Raspberry is moving to a new system to manage cameras, so when the user upgrades the OS via sudo apt-get upgrade the camera system gets the new library and the legacy camera system is disabled. To enable the legacy camera system again, try

sudo raspi-config

Then select

3 Interface Options    Configure connections to peripherals

then select

I1 Legacy Camera Enable/disable legacy camera support

and follow the directions to enable and then reboot.

Of course, this patch will only work for so long, as the legacy system has been deprecated.

Solution 9:[9]

I found a solution in https://github.com/opencv/opencv/issues/19527 where the video capture is inside the function instead of outside. That worked for me (ubuntu)

def frame_generation():

camera = cv2.VideoCapture(0) #resolved, correct position

while(True):

Solution 10:[10]

I also had the same problem. Just changed it to 1 and it was perfectly working. I guess it's related to the number of camera devices you have used.

For example, I guess I have Iruin external camera as my first option which I didn't connect this time.

Here is the error and corrected code.

global /tmp/pip-req-build-f51eratu/opencv/modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video0): can't open camera by index

Code to change:

vid = cv2.VideoCapture(1)

Solution 11:[11]

For Linux, make sure OpenCV is built using the WITH_V4L (with video for linux).

Solution 12:[12]

I've also had this problem on Ubuntu

I've solved this by these comands

sudo adduser username video sudo usermod -a -G video username

username - it is the name of your device

than write

id -a

and copy index from ()

for me it is 1000

so than just write:

camera = cv2.VideoCapture(1000)

Solution 13:[13]

This issue is due to the interruption. Try to end the execution with the key 'q' for example, don't close the window suddenly.

I solved the same issue by opening terminal again and execute the same script again.