Сборка opencv была значительно улучшена со времени первоначальной публикации, так что это должна быть жизнеспособная альтернатива.
аюсь прочитать кадры файла .mov с помощью OpenCV 3.2 (изканал Menpo Conda). Я использую Python 3.5.3 через Anaconda на 64-битной установке Ubuntu 16.04.
Проблема в том, что я получаю следующее сообщение об ошибке от OpenCV, когдаcap.read()
вызов, и цикл сразу прерывается и ловит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()
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 по этой теме, но они не совсем соответствуют моим конкретным обстоятельствам:
Этот вопрос предлагает перестроить OpenCV (также использует Python 2). Это не вариант для меня, так как я пытаюсь сделать это с Анакондой.Эти два вопроса (Вот а такжеВот) на форумах OpenCV остались без удовлетворительных ответов.Вот этот имеет оживленное обсуждение и подробный ответ, но он специфичен для perl.К этому третьему пункту - здесь есть довольно много других вопросов, которые имеют цитатуinappropriate ioctl for device
но трудно понять, имеет ли какое-либо из них непосредственное отношение к этой проблеме.
В качестве частичного отступления: я установил точно такой же пакет conda opencv3 на мою машину MacOS, и вставленный здесь код прекрасно работает и работает с точно таким же файлом .mov, который я пробовал на машине с Ubuntu.
Есть идеи?