Seite 1 von 1

Open CV

Verfasst: Dienstag 23. Februar 2021, 23:28
von Moschi96
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

Re: Open CV

Verfasst: Dienstag 23. Februar 2021, 23:37
von __deets__
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.

Re: Open CV

Verfasst: Mittwoch 24. Februar 2021, 07:16
von ThomasL
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()

Re: Open CV

Verfasst: Mittwoch 24. Februar 2021, 07:41
von __deets__
@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.

Re: Open CV

Verfasst: Mittwoch 24. Februar 2021, 08:04
von darktrym
Str / Str ist auch ein interessantes Produkt der Fantasie

Re: Open CV

Verfasst: Mittwoch 24. Februar 2021, 10:32
von ThomasL
__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/

Re: Open CV

Verfasst: Mittwoch 24. Februar 2021, 14:45
von __blackjack__
@darktrym: Wo siehst Du das? Ich sehe da nur ``Path / str`` und das ist definiert und sinnvoll.