Usando la CameraServer

Capturando marcos de CameraServer

La imagen WPILibPi viene con todas las bibliotecas necesarias para crear su propio sistema de procesamiento de visión. Para obtener el fotograma actual de la cámara, puede utilizar la biblioteca CameraServer. Para obtener información sobre CameraServer, consulte Vídeo de Lectura y Procesamiento: Clase de CameraServer.

from cscore import CameraServer
import cv2
import numpy as np

cs = CameraServer.getInstance()
cs.enableLogging()

camera = cs.startAutomaticCapture()
camera.setResolution(width, height)

sink = cs.getVideo()

while True:
   time, input_img = cvSink.grabFrame(input_img)

   if time == 0: # There is an error
      continue

Nota

OpenCV reads in the image as BGR, not RGB for historical reasons. Use cv2.cvtColor if you want to change it to RGB.

A continuación se muestra un ejemplo de una imagen que podría capturarse desde CameraServer.

2020 game target with the retroreflective tape illuminated green.

Envío de marcos a CameraServer

A veces, es posible que desee enviar fotogramas de video procesados ​​a la instancia de CameraServer para fines de depuración o para ver en una aplicación del dashboard como Shuffleboard.

#
# CameraServer initialization code here
#

output = cs.putVideo("Name", width, height)

while True:
   time, input_img = cvSink.grabFrame(input_img)

   if time == 0: # There is an error
      output.notifyError(sink.getError())
      continue

   #
   # Insert processing code here
   #

   output.putFrame(processed_img)

Como ejemplo, el código de procesamiento podría delinear el objetivo en rojo y mostrar las esquinas en amarillo para fines de depuración.

A continuación se muestra un ejemplo de una imagen completamente procesada que se enviaría de vuelta a CameraServer y se muestra en la computadora Driver Station.

Image above with the target outlined in red by the algorithm.