Open CV

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
Moschi96
User
Beiträge: 6
Registriert: Dienstag 8. Dezember 2020, 14:04

Hey,
hat schon mal einer von euch mit OpenCV gearbeitet? Ich habe massive Probleme auf meinen Ordner zuzugreifen und dann diese Bild Dateien auszuwerten.
Dazu gibt es leider schon echt viele Treads bei Stackoverflow oder sonstigen Foren. Ich sage leider, da ich nicht in der Lage bin es selbst zu lösen.

Code: Alles auswählen

from pathlib import Path
from seaborn import displot
from numpy import random as nrandom
import matplotlib.pyplot as plt
import cv2
from skimage.metrics import structural_similarity

# Pfad von dieser Datei
dataFolder = Path(__file__).resolve().parent # Absoluter Pfad zum Ordner dieser Datei, findet ihn automatisch heraus

# Erstelle Pfade zu den zu erstellenden/lesenden Bilddateien
image1FilePath = dataFolder / "507667061009.jpg"
image2FilePath = dataFolder / "507750060708.jpg"




def readImages():#

    # Lese Images und zeige Differenzen
    image1 = cv2.imread(str(image1FilePath)) # Lese Bilder mit opencv - wandle Path in ein string um mit str()
    image2 = cv2.imread(str(image2FilePath))

    # Bilder können angezeitg werden
    cv2.imshow("test", image1)
    cv2.waitKey(0) # Programm zeigt Bild und wartet bis eine Taste gedrückt wird
    cv2.imshow("test2", image2)
    cv2.waitKey(0)

    # Convert images to grayscale
    before_gray = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
    after_gray = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)
    '''   
    cv2.imshow("before_gray", before_gray)
    cv2.waitKey(0)
    cv2.imshow("after_gray", after_gray)
    '''
    # Berechne Differenz und den Gleichheitsscore
    (score, diff) = structural_similarity(before_gray, after_gray, full=True)

    # Zeige Differenzen
    cv2.imshow("difference", diff)
    cv2.waitKey(0)
    print("Image similarity", score)



readImages()
print("Fertig")


Code: Alles auswählen

raceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/IPython/core/interactiveshell.py", line 3427, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-2-e9f8d3e7dbdc>", line 1, in <module>
    runfile('/Users/nm/Desktop/Projektarbeit/wetterdatenanlyse-share/analysisModels/difference', wdir='/Users/nm/Desktop/Projektarbeit/wetterdatenanlyse-share/analysisModels')
  File "/Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/_pydev_bundle/pydev_umd.py", line 197, in runfile
    pydev_imports.execfile(filename, global_vars, local_vars)  # execute the script
  File "/Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "/Users/nm/Desktop/Projektarbeit/wetterdatenanlyse-share/analysisModels/difference", line 48, in <module>
    readImages()
  File "/Users/nm/Desktop/Projektarbeit/wetterdatenanlyse-share/analysisModels/difference", line 25, in readImages
    cv2.imshow("test", image1)
cv2.error: OpenCV(4.5.1) /private/var/folders/nz/vv4_9tw56nv9k3tkvyszvwg80000gn/T/pip-req-build-yaf6rry6/opencv/modules/highgui/src/window.cpp:376: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow'
Das kommt als Fehlermeldung raus

Wenn ich die Datei im selben Skript erzeuge und auswerte funktioniert es. Ich muss aber leider auf die Dateien per Ordner hinterher manuell zu greifen.
Wenn irgendwer ne Ahnung hat, was ich falsch mache, dem gebe ich ein Kasten aus.

Beste Grüße
Nils
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du denkst nur due liest Bilder. Tust du nicht, die Pfade stimmen nicht. Entsprechend sind image1 oder image2 None, und der versuch die anzuzeigen landet in der assertion.
Benutzeravatar
ThomasL
User
Beiträge: 1379
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Warum das hier? dataFolder = Path(__file__).resolve().parent # Absoluter Pfad zum Ordner dieser Datei, findet ihn automatisch heraus

Hier schauen https://docs.python.org/3/library/pathlib.html#methods

Mein Vorschlag wäre pathlib.cwd()
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

@ThomasL das ist ein gängiger Trick um Dateien relativ zum Skript zu finden. Was du vorschlägst ist da weniger hilfreich, weil es einfach das Arbeitsverzeichnis benutzt. Und das kann sonstewo hinzeigen, je nach Aufruf.
Benutzeravatar
darktrym
User
Beiträge: 785
Registriert: Freitag 24. April 2009, 09:26

Str / Str ist auch ein interessantes Produkt der Fantasie
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Benutzeravatar
ThomasL
User
Beiträge: 1379
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

__deets__ hat geschrieben: Mittwoch 24. Februar 2021, 07:41 @ThomasL das ist ein gängiger Trick um Dateien relativ zum Skript zu finden. Was du vorschlägst ist da weniger hilfreich, weil es einfach das Arbeitsverzeichnis benutzt. Und das kann sonstewo hinzeigen, je nach Aufruf.
Ok, Danke.
Dann stellt sich nur die Frage, warum er bei cv2.imread() ein None zurück bekommt.
Aber vielleicht hilft ihm ja dieser Blogpost hier: https://www.pyimagesearch.com/2016/12/2 ... pe-errors/
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@darktrym: Wo siehst Du das? Ich sehe da nur ``Path / str`` und das ist definiert und sinnvoll.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten