2016-05-31 4 views
2

cv2.imread("some.jpg") schlägt fehl, viele verschiedene jpgs zu lesen. Ich habe eine Million verschiedene Dinge geprüft:cv2.imread schlägt im Skript fehl, nicht in der Befehlszeile

  1. Führen Sie den gleichen genauen Code in einem Terminal - liest und öffnet Bilder ganz gut
  2. Ich habe Versionsnummern sowohl Python und cv2 - sie sind genau die gleichen: 3.4.3 und 3.1.0.
  3. Verwendete vollständige Pfade zu Dateien. Kein Unterschied
  4. Bilder vorhanden: Ich habe Dutzende manuell geöffnet, um zu sehen, ob es etwas gibt
  5. Timing: Pausen hinzugefügt, nur um sicherzustellen, dass dies kein Timing-Problem war.
  6. geprüft, um sicherzustellen, dass die img/filename mit print(os.path.exists(filename)) # prints True existiert
  7. hartcodiert einen Dateipfad in `img = imread ("gif_pos_0pW-p-wb8U4_0.jpg") # print (img) ... Keine
filename = random.choice(filename_list) 
print("reading:", filename) # prints correct/verified jpg paths 
sleep(.5) 
img = cv2.imread(filename) 
sleep(.3) 
print(img) # none 
read_image = cv2.resize(img, (IMAGE_WIDTH, IMAGE_HEIGHT), 3) 

img ist keine und die resize-Linie nicht mit: OpenCV Error: Assertion failed (ssize.area() > 0) in resize, file /home/user/opencv/modules/imgproc/src/imgwarp.cpp, line 3229

Dies ist Ubuntu 15.1, wenn es darauf ankommt. Irgendwelche Gedanken darüber, was das verursachen könnte?

Ja, ich weiß, dass diese Frage woanders existiert. Die vorhandenen Antworten haben mir nicht geholfen. Ich habe alles vierfach überprüft. Es scheint etwas anderes los zu sein.

Die seltsamste Teil ist, dass CV2 liest das Bild nur gut aus der Befehlszeile, mit der gleichen genauen Python und CV2-Versionen.

EDIT: Dies ist ein Skript, also mache ich gerade python3 train.py.

+0

Haben Sie 'sys.executable' überprüfen, ist für beide gleich? – user1767754

+0

nein, aber ich werde es jetzt versuchen. EDIT: Es ist das gleiche ... – JohnAllen

+0

Willst du damit sagen, dass ein Bild geöffnet wird und das andere nicht? Oder wird überhaupt kein Bild geöffnet? – tfv

Antwort

3

Das Skript wird möglicherweise als anderer Benutzer mit anderen Berechtigungen oder an einem anderen Speicherort ausgeführt als der Code in der Befehlszeile.

  • prüfen Existenz Datei im Code mit os.path.isfile
  • geben Auskunft über den Skript (Sprache) und wie Sie es starten. Ist das ein Cron-Job oder eine ausführbare Datei? Starten Sie das Skript manuell über die Befehlszeile, und erst danach können Sie Stapeljobs erstellen oder aus anderen Skripts aufrufen.
  • Können Sie Beispiele für Pfade angeben?
  • Funktioniert der Versuch, ein einzelnes Bild im selben Verzeichnis zu laden, ohne random.choice zu verwenden?)
  • Funktioniert der folgende Code mit dem angehängten Bild? Für mich geht das.

enter image description here

import cv2 

img=cv2.imread("image.jpg") 

cv2.imshow('Test',img) 
if cv2.waitKey(0) & 0xff == 27: 
    cv2.destroyAllWindows() 
+0

Ich habe vergessen, hinzuzufügen, dass ich überprüft habe, dass die Bilder mit etwas ähnlich wie unsere 'os.path.isfile' existieren. Will hinzufügen, dass und Skriptdetails – JohnAllen

+0

haben das Skript aus dem gleichen Verzeichnis auf den gleichen Bildern ausgeführt, wie ich den Interpreter aus ausgeführt. Sollte das nicht das Gleiche sein? Ziemlich sicher, dass ich letzte Nacht alle Bilder lesbar gemacht habe, werde das aber nochmal überprüfen. Vielleicht habe ich nicht rekursiv die Bilder lesbar gemacht? – JohnAllen

+0

In Unix-Systemen und mit Skripten würde ich * nur * mit vollen Pfaden arbeiten. – tfv