我在Ubuntu 16.04上尝试使用OpenCV 3.2在Python 3.5中打开视频文件时收到错误“无法停止流:设备的不当ioctl”
在标记为重复之前,请注意我已查看过很多帖子,但没有一个帖子能解决我的问题。
我在conda下设置了一个虚拟环境。我知道有一种方法可以用conda安装OpenCV,但我不相信它包括我需要的ffmpeg或其他cuda能力。我已经为WITH_FFMPEG on和WITH_LIBV4L打开了OpenCV 3.2的源代码,我读过这也可以解决我的问题。我还将所有python3 cmake变量设置为指向虚拟环境中的python实例:
PYTHON3_LIBRARY /home/brett/anaconda3/envs/opencvtest/lib/
PYTHON3_LIBRARY_DEBUG
PYTHON3_NUMPY_INCLUDE_DIRS /home/brett/anaconda3/envs/opencvtest/lib/python3.5/site-packages/numpy/core/include
PYTHON3_PACKAGES_PATH /home/brett/anaconda3/envs/opencvtest/lib/python3.5/site-packages/
生成make配置后,我使用make -j8
在build目录中编译,然后使用sudo make install
进行安装。一切都运行成功,在安装中我看到它声明FFMPEG是ON。如果我现在在虚拟环境中启动Python,我可以导入cv2,但是当我尝试打开视频文件时,我看到上面的错误。我可以毫无问题地从网络摄像头捕获视频。在python中,命令print(cv2.__file__)
显示目录:
/home/brett/anaconda3/envs/opencvtest/lib/python3.5/site-packages/cv2.cpython-35m-x86_64-linux-gnu.so
所以它似乎使用了正确的OpenCV库。
我也尝试使用命令安装conda:
conda install -c menpo opencv3 ffmpeg
输出结果为:
The following NEW packages will be INSTALLED:
ffmpeg: 3.1.3-0 menpo
安装完成后,我仍然收到相同的错误消息。
我还需要做些什么才能让Python加载我在Conda下构建的OpenCV版本的视频文件?