python - 网络摄像头在 opencv-python 和 opencv-contrib-python 的 pip 版本中不起作用

标签 python opencv anaconda webcam

我一直在使用 anaconda 在 python 中的 opencv 中遇到网络摄像头问题。

问题如下: 如果通过以下两者中的任何一个安装了 opencv,我将无法打开网络摄像头:
pip install opencv-python(可用 3.1、3.2、3.3),或
pip install opencv-contrib-python(可用 3.2、3.3)

但是,当且仅当我从
安装它时它才会工作 conda install opencv(opencv 3.1可用)

但是,opencv 的某些功能仅在较新版本或当前无法通过 conda 提供的 contrib 版本中提供。 有谁知道为什么 pip 版本不起作用?

更新 => pypi 上的 Pip Packgage 没有链接到 FFMPEG for linux:
conda install -c conda-forge opencv 提供 3.3 但没有贡献
=> 如果需要其他版本,则需要从源代码构建

这里是用于使用网络摄像头的代码: (是的,我尝试了建议的各种变体

import cv2
print (cv2.__version__)
camera = cv2.VideoCapture(0) #tried -1,0,1,...

if camera.isOpened(): # isOpened is always False for pip version
    print ("successfully opened Webcam")
else:
    print ("Webcam error")  
success,img = camera.read() # success is always False for pip version
print (success,img.shape)
camera.release()

我尝试了各种网络摄像头,并按照网络上的建议对代码进行了各种更改。

最佳答案

pip 包中未链接底层库。这是一种设计选择,目的是让软件包更易于安装。

来自 Python 包索引 (PyPI) documentation for the opencv-python package :

Q: Why I can’t open video files on GNU/Linux distribution X or on macOS?

A: OpenCV video I/O depends heavily on FFmpeg. Manylinux and macOS OpenCV binaries are not compiled against it. The purpose of these packages is to provide as easy as possible installation experience for OpenCV Python bindings and they should work directly out-of-the-box. Adding FFmpeg as an additional dependency without a “universal” FFmpeg build (e.g. LGPL licensed build like in the Windows wheels) the goal is considerably harder to achieve. This might change in the future.

如果您想使用较新的版本并且没有这些问题,您可以从源代码编译 OpenCV。有很多这样的教程。 OpenCV 有针对 compiling on Windows 的 Python 特定教程和 on Fedora .此外,PyImageSearch 有很多关于在 macOS 和 Linux 上从源代码编译 OpenCV 的博客文章:Ubuntu 16.04 , Ubuntu 14.04 , macOS , macOS via Homebrew (附带 troubleshooting article ),以及许多其他 Linux 风格(例如 Raspbian)和旧 Python 版本的帖子;如果没有涵盖您,只需搜索网络即可。

关于python - 网络摄像头在 opencv-python 和 opencv-contrib-python 的 pip 版本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46527000/

相关文章:

python - 当只有某些变量需要多个值时,如何将多个值传递给函数 - python 3

python - 为 Scientific Linux 创建 Python 包?

ios - opencv2.framework/opencv2(surf.o) 架构armv7的重复符号

python - 在 windows 中使用 anaconda 安装 tensorflow

python - 如何将值分配给列表中的 python 字典

python - OpenCV将多个帧转换成视频

c++ - 从 OpenCV 3 中的 VideoCapture 获取垫子

ipython - 如何为 Anaconda/Jupyter 设置默认环境?

python - Python Anaconda Windows 10 的 XGBoost 安装问题(2018 年 5 月 18 日)

java - 加载自定义 NER 模型 Stanford CoreNLP