cv2.VideoCapture.open() always returns FALSE

廉价感情. 提交于 2019-11-28 09:50:58
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

if you are getting this kind of an error then probably something is wrong with the indexing.

instead of cv2.VideoCapture(0) add:

cv2.VideoCapture(-1)

this will get you the first working camera. And if anything goes wrong, just post the stack trace here and i'll see if i can help you :)

video related functionality is not supported (not compiled with FFmpeg), if cv2 was installed from pypi wheel:

pip install opencv-python

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

I met the similar issue. It may be related to user permission. Try using the follow procedure to diagnose the issue.

  1. Run the following command to determine the camera access permission

    ls -la /dev/video*

    You might get similar output as below (you might get video1 if you have multiple cameras). As you can see, only root user and users in video group have the permission to access the camera.

    crw-rw----. 1 root video 188, 0 Apr 3 21:16 /dev/video0

  2. So the fix is simple, add your user account to the video group, using the follow command:

    sudo usermod -a -G video <you login name>

Hope it helps!

If you didn't solve it in many ways,you can try to
find and install "opencv3.2.0-dev",I use it to solve
the problem twice.
just pip install opencv-python is not enough.(hmm,
at least sometimes)

It depends on the argument being passed to the cv2.VideoCapture().

Normally, it is 0 for making the primary webcam of your pc work. Similarly, if you want to get access to a second camera installed on you system pass the argument as 2.

But if you have only 1 camera and indexing '0' is not helping, then try passing the index as -1 instead.

First If you are trying to capture video, then cam.open() is not the right way to do it. open() method initializes the camera object(in this case the "cam").

Secondly Here the cam.open() returns false because cv is not able to initialize the cam object. The VideoCapture() method already initializes your camera object. You can check this by adding

cam.isOpened()

right after

cam.VideoCapture(0)

that will return "True".

Thirdly if you want to vied camera feed, this is the conventional way to do it

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

I found something in documentation which might just help.

cap.read() returns a bool (True/False). If frame is read correctly, it will be True. Sometimes, cap may not have initialized the capture. In that case, the code shows error. You can check whether it is initialized or not by the method cap.isOpened(). If it is True, OK. Otherwise open it using cap.open().

Source: http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_video_display/py_video_display.html#display-video

user26641

It is a matter of missing packages. I had installed a bunch of packages after installing OpenCV. I ran the cmake again and it worked.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!