Aller au contenu
Français

Caméra RVB

La caméra donne une image de ce qui se trouve devant elle. Vous en avez besoin pour trouver et lire les marqueurs muraux. Le robot de départ a une caméra, nommée camera, de 64 × 40 pixels.

Une image est une grille de pixels. Chacun a une valeur de rouge, de vert et de bleu (RVB) de 0 à 255, où (0, 0, 0) est le noir et (255, 255, 255) le blanc.

from controller import Robot
robot = Robot()
timeStep = int(robot.getBasicTimeStep())
camera = robot.getDevice("camera")
camera.enable(timeStep)
width = camera.getWidth()
height = camera.getHeight()
print("The camera has", width, "x", height, "pixels")
while robot.step(timeStep) != -1:
image = camera.getImage()
# The colour of the pixel in the center of the image
r = camera.imageGetRed(image, width, width // 2, height // 2)
g = camera.imageGetGreen(image, width, width // 2, height // 2)
b = camera.imageGetBlue(image, width, width // 2, height // 2)
print("Center:", r, g, b)

OpenCV est une bibliothèque de traitement d’images : trouver des formes, comparer des couleurs et bien plus encore. Les images de Webots ont 4 valeurs par pixel, dans l’ordre BGRA, qu’OpenCV peut utiliser directement. Ce programme affiche l’image, et ses parties claires, dans deux fenêtres :

from controller import Robot
import cv2
import numpy as np
robot = Robot()
timeStep = int(robot.getBasicTimeStep())
camera = robot.getDevice("camera")
camera.enable(timeStep)
while robot.step(timeStep) != -1:
# Webots images have 4 channels per pixel, in BGRA order
image = np.frombuffer(camera.getImage(), np.uint8).reshape((camera.getHeight(), camera.getWidth(), 4))
frame = cv2.cvtColor(image, cv2.COLOR_BGRA2BGR)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY) # Bright parts in white
cv2.imshow("camera", cv2.resize(frame, None, fx=4, fy=4, interpolation=cv2.INTER_NEAREST))
cv2.imshow("threshold", cv2.resize(thresh, None, fx=4, fy=4, interpolation=cv2.INTER_NEAREST))
cv2.waitKey(1) # Shows the windows

À gauche, une image de la caméra du robot de départ devant une victime lettre. À droite, ses parties claires, telles que ce programme les trouve.

Une image de caméra d’une victime lettre, et ses parties claires en blanc

Les fenêtres comme celles-ci servent aux tests à la maison : désactivez-les pour la compétition.

Une résolution plus élevée permet de voir les marqueurs de plus loin, mais coûte plus cher et demande plus de temps de traitement. Vous choisissez la résolution de chaque caméra dans le Robot Customizer.