Bild aktualiseren mit OpenCV

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
CopenV
User
Beiträge: 1
Registriert: Montag 17. Dezember 2018, 12:42

Hallo,

Ich bin Python Neuling.
Derzeit versuche ich mich an einem Programm zur Objekterkennung mithilfe einer vorimplementieren Funktion, welche bei Aufruf mir die x-y Koordinaten wiedergibt. Dadraus will ich an den Stellen Rechtecke zeigen. Der Benutzer soll eine Schwelle für die Erkennung auswählen können und nach bestätigen dieser, soll das Bild geupdatet werden.
Leider gibt es folgende Probleme
-Während des Aufrufes des Erkennungsprogramms hängt das Bildfenster sich auf, es funktioniert erst wieder nachdem es beendet ist
-Es wird nicht geupdatet, sondern es wird nur über das zuletzt angezeigte Bild mti den Rechtecken "drübergezeichnet"


Code: Alles auswählen

import cv2
img = cv2.imread('test.jpg', cv2.IMREAD_COLOR) 
cv2.imshow('image', img) 
cv2.waitKey(0)
while True:
    threshold=float(input("Schwelle eingeben: "))
    results=Objekterkennugn(threshold)
    img_neu=img
    for i in range(len(result)):
        img_neu = cv2.rectangle(img,(result[i]['topleft']['x'],result[i]['topleft']['y']), (result[i]['bottomright']['x'],result[i]['bottomright']['y']),  (0, 255, 0), 3)  
    cv2.imshow('image', img_neu) 
    cv2.waitKey(0)
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da ist so einiges im Argen:
- um Zuweisungen macht man Leerzeichen, so ist das schwer lesbar.
- statt einen index zu erzeugen, und ueber den zu iterieren, iterient man *gleich* ueber die Elemente einer Liste

Code: Alles auswählen

for item in result:
     cv2.rectanggle(img, item['topleft'], ...)
- img_neu=img ist KEINE Kopie, sondern jetzt hast du einfach zwei Namen, die auf das gleiche Objekt zeigen. Benutz

Code: Alles auswählen

img_neu = img.copy()
- die rectangle-Funktion modifiziert das uebergebene Bild. Selbst wenn sie das nicht taete, wuerdest du dann jedes mal ein einzelnes Rechteck zeichnen.
- statt den Wert per input abzufragen, koenntest du den Wert per Einstellregler aus der highgui erfassen.
- wenn Objekterkennung lange laeuft, dann wird nichts upgedated. Wenn du das willst, musst du uns zeigen, was das wie tut.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Eine gute Webseite rund um OpenCV findest du hier https://www.pyimagesearch.com
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
Antworten