Mag*_*sol 8 python opencv anaconda conda
我正在尝试使用OpenCV 3.2(来自menpo conda频道)读取.mov文件的帧.我在Ubuntu 16.04 64位设置上使用Python 3.5.3通过Anaconda.
问题是,当我遇到cap.read()调用时,我从OpenCV得到以下错误消息,并且循环立即中断并捕获if num == 0条件.
这是我正在运行的全部代码:
import cv2
import numpy as np
import sys
f = sys.argv[1]
cap = cv2.VideoCapture(f)
frames = []
num = 0
while cap.isOpened():
ret, frame = cap.read()
if not ret: break
gframe = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
frames.append(gframe)
num += 1
if num % 100 == 0:
frames.append(gframe)
if num % 1000 == 0:
print(num)
if num == 0:
print("Something went wrong: no frames found.")
exit(0)
cap.release()
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)
user@ubuntu:/data$ python read.py movie.mov
Unable to stop the stream: Inappropriate ioctl for device
Something went wrong: no frames found.
user@ubuntu:/data$
我在这个主题上发现了其他几个StackOverflow问题,但它们并没有完全转化为我的确切情况:
至于第三点 - 这里有很多其他问题都有引用,inappropriate ioctl for device但很难看出它们中的任何一个是否与这个问题直接相关.
暂时不说:我已经在我的macOS机器上安装了这个完全相同的opencv3 conda软件包,我在这里粘贴的代码工作正常,并且在我尝试过的Ubuntu机器上完全相同的.mov文件.
有任何想法吗?
通过完全绕过它解决了这个问题。
将OpenCV 的opencv-feedstock配方用于 conda-forge。该recipe文件夹中是 conda 的构建信息。我修改了该build.sh文件,更改了以下选项:
-DBUILD_PNG=1
-DBUILD_JPEG=1
-DWITH_CUDA=1
-DWITH_FFMPEG=1
Run Code Online (Sandbox Code Playgroud)
从父目录运行conda build --numpy 1.12 recipe(必须指定 NumPy 版本,因为构建脚本要求列出了numpy x.x,这意味着您必须在运行时提供版本),然后等待。
花了很长时间(说真的,在一台非常强大的机器上花了几个小时——时间消耗是 CUDA),但构建最终成功完成。
然后只需安装本地构建的 bz2 存档 ( conda install --use-local opencv) 即可。不再有奇怪的 ioctl 错误消息,上面的脚本工作得很好。
| 归档时间: |
|
| 查看次数: |
9059 次 |
| 最近记录: |