2017-11-10 3 views
2

Ich habe Probleme mit OpenCV 2.4.9, um eine Videodatei mit Python zu lesen (und zu zeigen). Ich weiß, dass es kein Problem ist, die Datei zu finden, weil ich cv2.imread() lesen konnte, um ein Bild aus demselben Verzeichnis zu lesen. Es ist definitiv ein Problem mit cv2.VideoCapture(). Hier ist der Code und Ausgabe Ich habe immer:OpenCV 2.4.9 VideoCapture() liest Videodatei nicht in Enthought Python 2.7 Umgebung

import cv2 
import numpy as np 

    testvid = cv2.VideoCapture('testvid.avi') 

while(1): 
    ret, frame = testvid.read() 
    print ret 

    cv2.imshow('frame',frame) 
    k = cv2.waitKey(30) & 0xff 
    if k == 27: 
     break 

testvid.release() 
cv2.destroyAllWindows() 

Ausgang:

False 

error: C:\pisi\tmp\opencv-2.4.9-5\work\opencv-2.4.9\modules\highgui\src\window.cpp:261: error: (-215) size.width>0 && size.height>0 in function cv::imshow 
OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow, file C:\pisi\tmp\opencv-2.4.9-5\work\opencv-2.4.9\modules\highgui\src\window.cpp, line 261 

Ich weiß, dass es einige Leute gegeben, die das gleiche Problem gehabt haben. This thread und this tread adressieren beide das Problem, indem Sie sagen, dass Sie die opencv_ffmpeg.dll-Datei umbenennen müssen, um Ihre Version anzupassen und sie in das Python-Hauptverzeichnis oder -Verzeichnis in Ihrem Pfad (oder etwas in diesem Sinne) zu kopieren.

Allerdings verwende ich Python 2.7.13 durch Enthought (auf Empfehlung von meinem Professor), und die Pfade und Wege, Bibliotheken und Pakete eingerichtet sind scheinen völlig anders als in den anderen Threads. Enthought verwendet einen Paketmanager, der OpenCV automatisch für mich herunterlädt und einrichtet. Es gibt kein Python-Verzeichnis. Alles ist durch Enthought. Nach einigem Graben fand ich, wo alle der OpenCV .dlls befinden, einschließlich opencv_ffmpeg249_64.dll:

C:\Users\USERNAME\AppData\Local\Enthought\Canopy\edm\pkgs\03\9d58e152b8f411718220c30639b8448585cb7d9a82de662c7e34b35d9ec1f6 

Also, was soll ich tun mit diesem? Wo kopiere ich die .dll? Ist das .dll selbst das Problem hier? Ich habe so viele Dinge ausprobiert, einschließlich Kopieren an alle möglichen Orte und Umbenennen der .dll, und nichts hat funktioniert. Hilfe!

Antwort

1

Um Ihr Problem zu lösen ich Sie von Grund auf neu und führen Sie die folgenden Schritte neu zu starten würde vorschlagen:

1 - Installieren Sie eine neue Standard-Version von Python 3 auf Ihrem Rechner

2 - Laden Sie die get-pip.py Datei von https://bootstrap.pypa.io/get-pip.py

3 - Öffnen Sie ein Terminal und cD auf den Ordner, in dem Sie heruntergeladen haben die get-pip.py Datei

4 - Geben Sie dann python3 get-pip.py auf Ihrem Terminal zu installieren, um pip

5 - Sobald das pip installiert ist, sind Sie bereit Cmake installieren von pip install cmake auf Ihrem Terminal eingeben

6 - Nun zu https://github.com/opencv/opencv gehen und das gesamte Repository von opencv

7 herunterladen - Auf dem Terminal cd zu dem Ordner, in dem Sie das opencv Repository heruntergeladen und kompiliert es mit cmake eingeben

mkdir release

cd release

cmake -D CMAKE_BULD_TYPE=RELEASE -D BUILD_PYTHON_SUPPORT=ON USE_V4L=ON WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON USE_GStreamer=ON ..

make

make install

8 - Jetzt CD zu th e Verzeichnis, in dem yourscript.py befindet, und Sie sollten das Skript ohne Probleme Eingabe auf Ihrem Terminal python3 yourscript.py

mich ausführen können, Lassen Sie wissen, ob das Problem

Hoffnung löst das hilft

+0

Danke für den Rat. Ich habe Python 3 heruntergeladen und pip funktioniert, aber ich konnte cmake nicht richtig funktionieren lassen. Ich habe eine andere Methode ausprobiert, bei der ich opencv installiert habe, indem ich eine .whl-Datei für opencv herunterlädte. Aber jetzt, wenn ich das Programm ausführen, bekomme ich das: 'ImportError: DLL laden fehlgeschlagen:% 1 ist keine gültige Win32-Anwendung ' – Spaceguy44

+0

Ich sollte auch klarstellen, dass ich Windows 10 verwende. – Spaceguy44

+0

Versuchen Sie nicht, opencv zu installieren Pip installiert seine .whl-Datei: es wird nicht funktionieren. Könnten Sie bitte Details zu den Problemen mit cmake geben? – Employee

0

Tun Sie nichts in diesem Verzeichnis - das ist ein privates Cache-Verzeichnis des Paketmanagers und wenn Sie sich damit herumschlagen, wer weiß, was Sie kaputt machen werden. Ihre Canopy-Python-Umgebung befindet sich in Canopy \ edm \ envs \ User.

Ohne weitere Untersuchung weiß ich nicht, ob Ihr Skript in Python 2.7 ausgeführt werden soll, aber wenn Sie in Python 3 wie von der ersten Antwort vorgeschlagen versuchen möchten, können Sie einfach eine Python 3.5-Umgebung in Ihrer Canopy-Installation installieren. Befolgen Sie diese Anweisungen:

+0

Ich habe es mit Python 3.5 in Enthought Canopy versucht und es gibt mir einen ähnlichen Fehler. Dieses Mal hat Canopy opencv 3.2.0 installiert. – Spaceguy44

1

Das Problem (zumindest soweit ich sagen kann, ohne Ihre Testdatei) ist, dass Ihr Code den Wert ret nach testvid.read() nicht überprüfen kann. Wenn dieser Anruf False zurückgibt, dann gibt es keine weiteren Bilder zum Anzeigen, also nicht überraschend, imshow() wird fehlschlagen.

+0

@ spaceguy44, hat dies deine Frage beantwortet? –

+0

@ spaceguy44 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

Verwandte Themen