Liste von Listen zu Liste von Tupeln

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
G-Rizzle
User
Beiträge: 90
Registriert: Donnerstag 18. Februar 2021, 12:26

Hi,

ich möchte die Konturen eines farbigen Gegenstandes markieren. Dazu übertrage ich ein Webcambild in das pygame Fenster. Die Erkennung mache ich mich cv2 über

Code: Alles auswählen

self.contours, self.hierarchy = cv2.findContours(self.mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)


und dort funktioniert es bereits. Die Koordinaten der Konturen liegen als Liste von Listen vor, also

[[[x1 y1]]

[[x2 y2]]

[[x3 y3]]

.
.
.


Zur farbigen Umrandung des Gegenstandes möchte ich die einzelnen Punkte nun verbinden.
dazu nutze ich die funktion pygame.draw.lines. diese fordert jedoch eine Liste von Tupeln, also [(x1, y1), (x2, y2) ] etc. ich könnte die ursprüngliche liste von listen eben in einer for-schleife "umformatieren", jedoch entsteht dadurch eine merkbare verzögerung (weil in jedem frame diese liste erstmal durchlaufen und umformatiert wird). gibt es eine effizientere möglichkeit das ganze ins gewünschte format zu bringen?


Besten Dank!
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

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
G-Rizzle
User
Beiträge: 90
Registriert: Donnerstag 18. Februar 2021, 12:26

hm naja, das ist ja seliges problem, nämlich dass ein anderes format gefordert wird
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

opencv hat eine drawContours Funktion genau zu diesem Zweck. Warum nimmst du die nicht?
G-Rizzle
User
Beiträge: 90
Registriert: Donnerstag 18. Februar 2021, 12:26

ich programmiere eine tello drohne und nutze als frontend pygame. cv bietet dafür nicht die optionen die ich haben möchte
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dann wirst du mit der Verzögerung durch die Transformation leben müssen. OpenCV kann das besser, weil es in C++ und mit dem vorliegenden Format arbeitet.
G-Rizzle
User
Beiträge: 90
Registriert: Donnerstag 18. Februar 2021, 12:26

okay danke.

dann muss ich das wohl hinnehmen. gibt es eine besonders elegante lösung eine liste der form [[x1 y1] [x2 y2]] auf das format [(x1, y1), (x2, y2)] zu bringen?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich würde es mit einer List comprehension machen.
Antworten