OpenCV - Bild anzeigen und schließen lassen

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
onur22
User
Beiträge: 19
Registriert: Freitag 28. Dezember 2018, 21:25

Hallo,

ich versuche ein kleines Tool mit dem OpenCV Modul zu schreiben. Das Tool soll ein Bild aus einem bestimmten Verzeichnis einlesen und öffnen. Anschließend soll es so lange offen bleiben, bis der User etwas via input eingegeben hat und danach schließen.

Nun weiß ich nicht, wie ich das bewerkstelligen kann. Es gibt in den Docs von OpenCV nur den Verweis auf waitKey, diese Funktion ermöglicht, dass ein Bild dann geschlossen wird, wenn eine gewisse Zeit abgelaufen ist bzw. jemand eine Taste drückt. Gibt es etwas konkretes für mein Vorhaben?

Code: Alles auswählen

import cv2


oriimg = cv2.imread('Verzeichnis')
img = cv2.resize(oriimg,(360,480))
solutionimg = "Lösung"
cv2.imshow('Test', img)
cv2.waitKey(1)



input("Was sieht man hier?")
if input==solutionimg:
    cv2.destroyAllWindows()
    print("Richtig!")
else:
    cv2.destroyAllWindows()
    print("Falsch!")
alles ist als Einsteiger möglich. Es ist nur die Frage, wie lange es dauert, bis man die nötigen Vorkenntnisse erworben hat.
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was soll der User denn eingeben? waitKey ist ja nun eine Eingabe, was also passt daran nicht? Generell ist OpenCV recht beschraenkt in dem, was highgui kann - https://docs.opencv.org/4.1.0/d7/dfc/gr ... ghgui.html

Da bietet es sich ggf an, auf ein richtiges GUI-Toolkit wie Qt zu setzen.
onur22
User
Beiträge: 19
Registriert: Freitag 28. Dezember 2018, 21:25

__deets__ hat geschrieben: Donnerstag 18. April 2019, 10:31 Was soll der User denn eingeben? waitKey ist ja nun eine Eingabe, was also passt daran nicht? Generell ist OpenCV recht beschraenkt in dem, was highgui kann - https://docs.opencv.org/4.1.0/d7/dfc/gr ... ghgui.html

Da bietet es sich ggf an, auf ein richtiges GUI-Toolkit wie Qt zu setzen.
Es wird ein Bild angezeigt und der User soll sagen, um welches Bild es sich handelt. Er sieht ein Fahrrad > Fahrrad als Lösung eingeben.

Langfristig wollte ich ohnehin eine GUI bauen, aber ich habe erstmal OpenCV gefunden, nachdem ich danach gesucht habe, wie man Bilder anzeigen lassen kann..
alles ist als Einsteiger möglich. Es ist nur die Frage, wie lange es dauert, bis man die nötigen Vorkenntnisse erworben hat.
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du nicht mehr als eine Handvoll Kategorien hast, dann ist getkey doch genau das richtige. Ich habe damit auch schon Klassifikationtools mit OpenCv geschrieben. F für Fahrrad drücken. G für Gartenzwerg. Etc. Dann noch cursor keys für im Datensatz bewegen, und schwups ist alles möglich.
onur22
User
Beiträge: 19
Registriert: Freitag 28. Dezember 2018, 21:25

__deets__ hat geschrieben: Donnerstag 18. April 2019, 12:58 Wenn du nicht mehr als eine Handvoll Kategorien hast, dann ist getkey doch genau das richtige. Ich habe damit auch schon Klassifikationtools mit OpenCv geschrieben. F für Fahrrad drücken. G für Gartenzwerg. Etc. Dann noch cursor keys für im Datensatz bewegen, und schwups ist alles möglich.
Ich habe sehr viele "Kategorien", aber ggf. könnte man einfach immer eine Auswahl von Begriffen vorgeben und dann kann der User die richtige Option wählen(A,B,C,D...)(falls es schwierig ist, ein ganzes wort als eingabe zu implementieren). Aber wie mache ich das mit waitKey? Da kann man ja nur ein zeitliches Delay einbauen? Du schreibst aber auch getKey, das finde ich aber gar nicht als Funktion dieses Modules?
alles ist als Einsteiger möglich. Es ist nur die Frage, wie lange es dauert, bis man die nötigen Vorkenntnisse erworben hat.
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich meinte waitKey. Und erstens kannst du ja auch endlos warten (waitKey(0)) und zweitens kannst du doch eine beliebige logik drumumstricken.

Code: Alles auswählen

while True:
       key = waitKey(10)
       if key != -1:
              ...
Falls man noch andere Dinge tun muss/will. Und was heisst denn "sehr viele Kategorien"?

Was jedenfalls nicht einfach und empfehlenswert ist: ganze Woerter eingeben. Das ist nicht vorgesehen, und ich wuerde mich bei dir bedanken als Benutzer, wenn ich "Katze" tippen muesst jedes mal wenn da eine Katze zu sehen ist. Dann hast du gleich noch das Problem mit falsch geschriebenen Worten etc...

Ein anderer Weg waere dann eine Hierarchie von Kategoriene, mit denen man sich auf das eigentliche Ding vorarbeitet. Lebewesen, Dinge, Sehenswuerdigkeiten. Notre Dame, Koelner Dom. Etc.
onur22
User
Beiträge: 19
Registriert: Freitag 28. Dezember 2018, 21:25

Mal etwas konkreter, was ich genau tun will. Vielleicht kannst du dann spezifischere Tipps geben :)
Ich bin Medizinstudent und würde gerne ein Tool schreiben, was das lernen etwas vereinfacht. In meinem Tool will ich ca. 100 Bilder von Präparaten implementieren, die nacheinander angezeigt werden sollen. Zwischen den einzelnen Bildern soll eben immer gefragt werden, was für ein Bild das ist(Knochengewebe, Muskel etc. sehr detailliert) und das Bild soll idealerweise nicht verschwinden, bevor man eine Eingabe getätigt und entsprechendes Feedback bekommen hat, ob die Antwort richtig ist.

Deswegen ziele ich so sehr darauf ab, unbedingt ganze Wörter einzugeben. Am Ende soll das Tool ohnehin noch eine GUI bekommen. Aber ich wusste nicht, wo ich anfangen sollte, deswegen habe ich es erstmal mit OpenCV probiert. Vielleicht gibt es was besser, um mein Ziel zu erreichen?
alles ist als Einsteiger möglich. Es ist nur die Frage, wie lange es dauert, bis man die nötigen Vorkenntnisse erworben hat.
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dann würde ich opencv einmotten & stattdessen Qt verwenden.
onur22
User
Beiträge: 19
Registriert: Freitag 28. Dezember 2018, 21:25

Alles klar vielen Dank, ich setz mich dran :)
alles ist als Einsteiger möglich. Es ist nur die Frage, wie lange es dauert, bis man die nötigen Vorkenntnisse erworben hat.
Antworten