OpenCV Bug?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
einfachich
User
Beiträge: 13
Registriert: Mittwoch 27. April 2011, 17:55

Hallo,

in IDLE kann man mit

Code: Alles auswählen

bild = cv.LoadImage("e:\bild1.jpg")
bequem Bilder laden. Merkwürdigerweise funktioniert das nicht bei allen Bildern.

Folgende Fehlermeldung erhalte ich ständig:

Code: Alles auswählen

Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    cv.LoadImage("e:\bildname.JPG")
IOError: [Errno 0] Error: 'e:\bildname.JPG'
Hier habe ich eins gefunden, bei dem es nicht funktioniert.
Bild
(http://tinyurl.com/6ymosur) (Link gekürzt)

Eigentlich habe ich das Problem nicht mit diesem Bild, sondern
mit zwei von dreien, die wir bearbeiten sollen, die ich hier aber
nicht reinstellen kann.

Das kann ich machen, was ich will, egal ob ich es umbenenne,
umkonvertiere (habs sogar als bmp versucht), der Fehler bleibt.

Merkwürdigerweise funktioniert das Laden aber immer
einwandfrei, wenn man die Bilder als Argumente ans Skript
hängt: wie "python test.py bild.jpg"

Kann das jemand erklären?
einfachich
User
Beiträge: 13
Registriert: Mittwoch 27. April 2011, 17:55

Falls es tatsächlich ein Bug ist, kann es jemand hier melden.
https://code.ros.org/trac/opencv
deets

Das hat nichts mit der OpenCV zu tun, sondern mit string-escape-codes. Du kannst nicht einfach backslashes verwenden. Du musst die escapen, oder raw-strings verwenden. Also "\\" statt "\", bzw. r"\test" statt "\test". Wobei es bei raw-strings da immer noch Ausnahmefaelle gibt, naemlich wenn der backslash am Ende ist.

Alternativ einfach normale slashes verwenden, sollte auch gehen.
einfachich
User
Beiträge: 13
Registriert: Mittwoch 27. April 2011, 17:55

string-escape-codes, wenn das der Grund wäre, müsste es dann nicht für alle Images gelten.

Ich hab hier zig Bilder, die ich genau so laden kann.
Und andere wiederum nicht? Was denkst Du?

Code: Alles auswählen

>>> g = cv.LoadImage("e:\l.jpg")
>>> a = cv.LoadImage("e:\r.jpg")

Traceback (most recent call last):
  File "<pyshell#45>", line 1, in <module>
    a = cv.LoadImage("e:\r.jpg")
IOError: [Errno 0] Error: 'e:\r.jpg'
So sieht das Prompt von IDLE bei mir aus.
"e:\l.jpg" geht, "e:\r.jpg" geht nicht.

Versuch es selbst aus mit dem Image unter dem Link von oben, und es geht nicht.

Nimm dieses Bild http://tinyurl.com/6cfbf69 und es geht.
BlackJack

@einfachich: Das gilt nur für Namen die Escape-Codes enthalten. Nicht jeder Backslash leitet einen Escape-Code ein -- nur solche auf die auch ein gültiger Code folgt. \l ist nichts besonderes aber \r ist das Zeichen für einen "Wagenrücklauf" ("carriage return").
einfachich
User
Beiträge: 13
Registriert: Mittwoch 27. April 2011, 17:55

Ich verstehe. danke.
Das Problem hatten anscheinend noch andere (google).
vg
Antworten