Сборка 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.

Есть идеи?

Ответы на вопрос(2)

Ваш ответ на вопрос