Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
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?
–
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
–
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.
–
–
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
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):
–
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()
–
–
–
–
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)
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.
–
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)
–
Don't know if this is still an issue.
In my case, I was getting the same error until I unplugged and plugged the usb camera. Even if I reboot, the error happened.
It's similar to someone said: my camera was already been captured.
The problem is that it was not used by my script, so it was hard to identify.
A few days before the issue, I installed the motion library, but just to test something and I didn't use it anymore. The motion starts at boot, so the camera was being captured by the service. That's why only the unplug-plug worked.
I uninstalled the library, and the error was gone.
–
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.
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.