Lewati ke konten
Bahasa Indonesia

Kamera RGB

Kamera memberikan gambar dari apa yang ada di depannya. Kamu membutuhkannya untuk menemukan dan membaca penanda dinding. Robot pemula punya satu kamera bernama camera, dengan resolusi 64 × 40 piksel.

Gambar adalah kisi piksel. Setiap piksel punya nilai merah, hijau, dan biru dari 0 sampai 255, dengan (0, 0, 0) adalah hitam dan (255, 255, 255) adalah putih.

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 adalah library untuk mengolah gambar: mencari bentuk, membandingkan warna, dan banyak lagi. Gambar Webots punya 4 nilai per piksel, dengan urutan BGRA, yang bisa langsung dipakai oleh OpenCV. Program ini menampilkan gambar, beserta bagian-bagiannya yang terang, di dua jendela:

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

Di kiri, gambar kamera robot pemula di depan korban huruf. Di kanan, bagian-bagiannya yang terang, seperti yang ditemukan program ini.

Gambar kamera sebuah korban huruf, dan bagian-bagiannya yang terang dalam warna putih

Jendela seperti ini hanya untuk pengujian di rumah: matikan saat kompetisi.

Resolusi yang lebih tinggi bisa melihat penanda dari jarak yang lebih jauh, tetapi biayanya lebih besar dan waktu pengolahannya lebih lama. Kamu memilih resolusi setiap kamera di Robot Customizer.