automatic_rgb565_color_tracking.py

# Esta obra está licenciada bajo la licencia MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Todos los derechos reservados.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Ejemplo de seguimiento automático de color en RGB565
#
# Este ejemplo muestra el seguimiento automático de un solo color en RGB565 usando la OpenMV Cam.

import csi
import time

print("Letting auto algorithms run. Don't put anything in front of the camera!")

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000)
csi0.auto_gain(False)  # debe estar desactivado para el seguimiento de color
csi0.auto_whitebal(False)  # debe estar desactivado para el seguimiento de color
clock = time.clock()

# Captura los umbrales de color de lo que hubiera en el centro de la imagen.
r = [(320 // 2) - (50 // 2), (240 // 2) - (50 // 2), 50, 50]  # Centro de 50x50 de QVGA.

print(
    "Auto algorithms done. Hold the object you want to track in front of the camera in the box."
)
print(
    "MAKE SURE THE COLOR OF THE OBJECT YOU WANT TO TRACK IS FULLY ENCLOSED BY THE BOX!"
)
for i in range(60):
    img = csi0.snapshot()
    img.draw_rectangle(r)

print("Learning thresholds...")
threshold = [50, 50, 0, 0, 0, 0]  # Valores medios de L, A, B.
for i in range(60):
    img = csi0.snapshot()
    hist = img.get_histogram(roi=r)
    lo = hist.get_percentile(
        0.01
    )  # Obtiene la CDF del histograma en el rango del 1% (¡AJUSTAR SEGÚN SEA NECESARIO!)
    hi = hist.get_percentile(
        0.99
    )  # Obtiene la CDF del histograma en el rango del 99% (¡AJUSTAR SEGÚN SEA NECESARIO!)
    # Promedio de los valores en el percentil.
    threshold[0] = (threshold[0] + lo.l_value) // 2
    threshold[1] = (threshold[1] + hi.l_value) // 2
    threshold[2] = (threshold[2] + lo.a_value) // 2
    threshold[3] = (threshold[3] + hi.a_value) // 2
    threshold[4] = (threshold[4] + lo.b_value) // 2
    threshold[5] = (threshold[5] + hi.b_value) // 2
    for blob in img.find_blobs(
        [threshold], pixels_threshold=100, area_threshold=100, merge=True, margin=10
    ):
        img.draw_detection(blob)
        img.draw_rectangle(r)

print("Thresholds learned...")
print("Tracking colors...")

while True:
    clock.tick()
    img = csi0.snapshot()
    for blob in img.find_blobs(
        [threshold], pixels_threshold=100, area_threshold=100, merge=True, margin=10
    ):
        img.draw_detection(blob)
    print(clock.fps())

results matching ""

    No results matching ""