python - 尝试使用网络摄像头 python opencv 捕获视频时出现 gstreamer 严重错误
问题描述
我正在尝试使用带有简单代码的 opencv 和 python 使用网络摄像头拍摄视频
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
print('cap.isOpened')
if cap.isOpened():
print ('cap is opened')
while(True):
re,img=cap.read()
cv2.imshow("video output", img)
k = cv2.waitKey(10)&0xFF
if k==27:
break
cap.release()
cv2.destroyAllWindows()
如果我尝试播放现有的视频,例如 .mp4 文件,它工作正常。但是当我尝试使用网络摄像头时出现错误
GStreamer-CRITICAL **:gst_element_get_state:断言“GST_IS_ELEMENT(元素)”失败 cap.isOpened
有关更多信息,我正在使用 odroid xu4 和 ubuntu 16.04,网络摄像头我使用罗技 c170(它在 webcamtest 和使用 guvcview 中正常工作)认为它不适用于奶酪和 camorama。
需要帮助请..
解决方案
以下解决方法有合理的工作机会:
cap = cv2.VideoCapture(0, cv2.CAP_V4L)
OpenCV 3 中添加了选择后端的功能,请参阅VideoCapture()
文档。
解决方法将我的 OpenCV 3.4.4 版本的后端切换到V4L(从默认 GStreamer),并在 16.04 机器上支持 GStreamer。这里是问题代码的输出以及之后的解决方法export OPENCV_VIDEOIO_DEBUG=TRUE
:
[ WARN:0] VIDEOIO(cvCreateCameraCapture_V4L(index)): trying ...
[ WARN:0] VIDEOIO(cvCreateCameraCapture_V4L(index)): result=0x20b1470 ...
cap.isOpened
cap is opened
如果解决方法对您不起作用,您可以检查您的 OpenCV 构建是否支持V4L
使用print(cv2.getBuildInformation())
. 这里是我构建的相关部分:
Video I/O:
DC1394: YES (ver 2.2.4)
FFMPEG: YES
avcodec: YES (ver 56.60.100)
avformat: YES (ver 56.40.101)
avutil: YES (ver 54.31.100)
swscale: YES (ver 3.1.101)
avresample: NO
GStreamer:
base: YES (ver 1.8.3)
video: YES (ver 1.8.3)
app: YES (ver 1.8.3)
riff: YES (ver 1.8.3)
pbutils: YES (ver 1.8.3)
libv4l/libv4l2: NO
v4l/v4l2: linux/videodev2.h
推荐阅读
- c# - 是否可以使用 SQLConfigDataSourceW 从 C# 创建 ODBC 系统 DSN?
- webstorm - 如何在 WebStorm 中添加“自定义”项目模板
- billboard.js - billboard.js - 根据标签值设置颜色,以便给定标签的数据在多个图表中一致着色
- docker - Docker - 无法从容器内 ping 主机子网上的任何内容
- python - 无法从 API 获取 Facebook 好友
- firefox - 在没有附加组件、扩展或插件的情况下加载 Firefox
- java - 如何隐藏或防止Springfox自动检测一些不必要的类,如File、InputStream等?
- python - TFrecord - 如何正确打印功能?
- python - 如何计算太阳能电池板的发电量(千瓦时)和 Python 中的电子设备
- amazon-web-services - AWS EFS:文件夹中允许的最大文件数