Als piloot, wil ik de drone live met het toetsenbord besturen terwijl ik het camerabeeld met de belangrijkste waarden zie, zodat ik meteen kan bijsturen en de vlucht later kan terugkijken.
Sensorwaarden leven als Python-variabelen, maar zijn onzichtbaar op het scherm. Met cv2.putText() teken je tekst direct in een frame — zodat batterij, hoogte of snelheid live op het beeld verschijnt.
Je weet al hoe je frames toont met imshow() en opslaat met VideoWriter. Wat je nog niet kunt: tekst op het frame zelf zetten. cv2.putText() doet precies dat — het tekent tekst direct in de pixels van een frame.
cv2.putText(
frame, # het frame — wordt direct aangepast
f"CPU: {cpu_usage}%", # de tekst (f-string werkt prima)
(10, 30), # positie: (x, y) linker onderkant
cv2.FONT_HERSHEY_SIMPLEX, # lettertype
0.7, # schaal (niet pixels, maar factor)
(0, 255, 0), # kleur: (Blauw, Groen, Rood)
2 # dikte in pixels
)
Let op de kleurvolgorde: OpenCV gebruikt BGR, niet RGB. Groen is (0, 255, 0) in beide — maar rood is (0, 0, 255), niet (255, 0, 0).
frame = cv2.putText(...) geeft None terug en wist je frame.putText()-aanroepen, elk met een grotere y-waarde.cv2.putText(frame, f"CPU: {cpu_usage}%", (10, 30), font, 0.7, (0,255,0), 2)
cv2.putText(frame, f"MEM: {mem_usage}%", (10, 60), font, 0.7, (0,255,0), 2)
cv2.putText(frame, f"TEMP: {temp}°C", (10, 90), font, 0.7, (0,255,255), 2)
Typ een sensorwaarde, kies een kleur en voeg toe. Zie direct het resultaat op het frame en de bijbehorende putText()-aanroep.
putText(). Groen klopt toevallig ((0,255,0)), maar rood en blauw zijn verwisseld. Onthoud: de volgorde is Blauw, Groen, Rood.
putText() aan op het frame vóórdat je het doorgeeft aan imshow() of writer.write(). Dan staat de tekst zowel op het scherm als in de opname.
De drone vliegt en streamt video. De piloot wil zonder naar de terminal te kijken al weten hoe het met de drone gaat. Zorg dat batterij, hoogte en snelheid rechtsbovenin het videoframe verschijnen. Bestand: drone_osd.py
import cv2
from djitellopy import Tello
tello = Tello()
tello.connect()
tello.streamon()
frame_read = tello.get_frame_read()
De stream loopt. Haal de sensorwaarden op via de Tello-methoden (get_battery(), get_height(), get_speed_x()), zet ze als tekst rechtsboven in het frame, en toon het frame. Denk na over: de positie (rechtsboven vraagt uitlijning), de kleurverantwoording en wanneer je de OSD toevoegt ten opzichte van imshow().
Acceptatiecriteria
imshow() werkt zonder fouten.