> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dwe.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Guía de video YUYV para stellarHD

> Captura, guarda y convierte fotogramas YUYV sin comprimir de la stellarHD, incluidos los modelos monocromáticos.

## Descripción general

La stellarHD expone dos formatos de video a través de su interfaz estándar UVC (USB Video Class):

* **MJPEG** — fotogramas comprimidos con JPEG. Ideal para frecuencias de imagen altas (hasta 60 FPS) y visualización en vivo.
* **YUYV** — video en bruto 4:2:2 sin comprimir. Ideal cuando necesitas los datos de píxel originales y sin procesar (visión artificial, fotogrametría, imagen científica).

Esta guía se centra en la captura **YUYV (RAW)**: cómo obtener fotogramas verdaderamente en bruto, guardarlos en disco y convertirlos para su inspección. También cubre un detalle específico de los **modelos stellarHD monocromáticos**, donde solo el canal de luminancia (`Y`) contiene datos de imagen reales.

<Note>
  YUYV no está comprimido, por lo que consume mucho más ancho de banda USB que MJPEG. Por lo tanto, el modo raw está limitado a frecuencias de imagen más bajas en resoluciones altas. Consulta las [especificaciones técnicas de stellarHD](/es/stellarHD/specs/stellarHD#resoluciones-y-frecuencias-de-imagen-compatibles) para conocer las combinaciones de resolución/frecuencia de imagen compatibles.
</Note>

## Requisitos

Estos comandos requieren una computadora con Linux y `v4l-utils`, GStreamer y FFmpeg instalados:

```bash theme={null}
sudo apt install v4l-utils ffmpeg \
  libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-tools \
  gstreamer1.0-x gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
  gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-plugins-ugly
```

## YUYV frente a MJPEG

|                      | YUYV (sin comprimir)                   | MJPEG                                           |
| -------------------- | -------------------------------------- | ----------------------------------------------- |
| Compresión           | Ninguna (4:2:2 sin comprimir)          | Comprimido con JPEG                             |
| Caso de uso          | Datos de píxel en bruto, análisis      | Alta frecuencia de imagen, vista previa en vivo |
| Frecuencia de imagen | Menor en alta resolución               | Hasta 60 FPS                                    |
| Tamaño de archivo    | `ancho × alto × 2` bytes por fotograma | Variable (pequeño)                              |
| Visible directamente | No (bytes en bruto)                    | Sí (cada fotograma es un JPEG)                  |

En los caps de GStreamer, el formato V4L2 `YUYV` se escribe como `YUY2`.

<Warning>
  **"YUYV" no está comprimido, pero no es raw del sensor.** En términos de cámara, *raw* significa el **mosaico de Bayer** sin procesar directamente del sensor: una muestra de color por píxel, antes del demosaico, balance de blancos o conversión de color. YUYV 4:2:2 (`YUY2`) es algo diferente:
  es la salida **ya procesada** de la cámara — los datos de Bayer se han demosaicado en la
  cámara, convertido al espacio de color YUV y sub-muestreado en croma (4:2:2 almacena dos muestras
  de croma por cada dos muestras de luma). Esto es cierto tanto para los modelos en color como
  monocromáticos: la salida está sin comprimir, pero sigue estando procesada y sub-muestreada.

  La stellarHD **no** expone los datos subyacentes de Bayer/raw del sensor a través de UVC, así que **no puedes** obtener un mosaico en bruto ni ejecutar tu propia canalización de demosaico. En esta guía, "raw" significa *datos de píxel sin comprimir*, no *raw del sensor*.
</Warning>

## Paso 1 — Identifica el nodo del dispositivo

Cuando conectas una stellarHD, el kernel crea varios nodos de dispositivo V4L2. Tanto YUYV como MJPEG se exponen en el **primer** nodo del grupo.

```bash theme={null}
v4l2-ctl --list-devices
```

Ejemplo de salida:

```text theme={null}
stellarHD Leader: stellarHD Lea (usb-0000:00:14.0-6):
	/dev/video4   # <-- this node outputs both YUYV and MJPEG
	/dev/video5
	/dev/media2
```

En este ejemplo, `/dev/video4` es el nodo a usar. Sustituye tu propio nodo en los comandos siguientes.

<Tip>
  Confirma los formatos, resoluciones y frecuencias de imagen que anuncia tu cámara antes de capturar:

  ```bash theme={null}
  v4l2-ctl -d /dev/video4 --list-formats-ext
  ```

  Deberías ver tanto entradas `YUYV` (4:2:2 sin comprimir) como `MJPG` (comprimido con MJPEG).
</Tip>

## Paso 2 — Captura un solo fotograma RAW

Usa `v4l2-ctl` para capturar un fotograma YUYV sin comprimir a resolución completa:

```bash theme={null}
v4l2-ctl -d /dev/video4 \
  --set-fmt-video=width=1600,height=1200,pixelformat=YUYV \
  --stream-mmap \
  --stream-count=1 \
  --stream-to=frame_1600x1200.yuyv
```

Esto escribe los bytes YUYV en bruto directamente en `frame_1600x1200.yuyv`.

### Verifica el tamaño del fotograma

Un fotograma en bruto completo debería tener exactamente `ancho × alto × 2` bytes:

```text theme={null}
1600 × 1200 × 2 = 3.840.000 bytes (~3,8 MB)
```

Si el tamaño del archivo coincide, has capturado un fotograma en bruto completo.

## Paso 3 — Convierte el fotograma RAW a PNG

Los bytes YUYV en bruto no son visibles directamente. Usa FFmpeg para convertir el fotograma en un PNG para su inspección:

```bash theme={null}
ffmpeg \
  -f rawvideo \
  -pixel_format yuyv422 \
  -video_size 1600x1200 \
  -i frame_1600x1200.yuyv \
  frame.png
```

<Warning>
  Debes indicar a FFmpeg el formato de píxel exacto (`yuyv422`) y la resolución (`-video_size`) del archivo raw. El video raw no tiene cabecera, así que si estos valores no coinciden con la captura, la imagen aparecerá torcida o corrupta.
</Warning>

## Modelos stellarHD monocromáticos

Debido a una peculiaridad de UVC, la stellarHD monocromática anuncia su salida como `YUYV 4:2:2` aunque el sensor no tiene información de color.

* Solo el canal **`Y` (luminancia)** contiene la imagen real.
* Los canales **`U` y `V` (croma)** son valores ficticios/fijos y pueden ignorarse.

Si conviertes un fotograma monocromático como color completo, es posible que veas un tinte falso proveniente de los datos de croma sin sentido. Extrae solo la escala de grises:

```bash theme={null}
ffmpeg \
  -f rawvideo \
  -pixel_format yuyv422 \
  -video_size 1600x1200 \
  -i frame_1600x1200.yuyv \
  -vf format=gray \
  mono.png
```

Esto utiliza solo el canal de luminancia y evita una interpretación de croma incorrecta.

### Verifica que la cámara sea realmente monocromática

Reproduce el archivo raw directamente con `ffplay`. Si la imagen aparece en escala de grises de forma natural, los canales de croma son constantes:

```bash theme={null}
ffplay \
  -f rawvideo \
  -pixel_format yuyv422 \
  -video_size 1600x1200 \
  frame_1600x1200.yuyv
```

## Pipelines de GStreamer

### Ver el flujo raw en vivo

```bash theme={null}
gst-launch-1.0 \
  v4l2src device=/dev/video4 ! \
  video/x-raw,format=YUY2,width=1600,height=1200,framerate=5/1 ! \
  videoconvert ! \
  autovideosink
```

### Guardar un fotograma raw en disco

```bash theme={null}
gst-launch-1.0 -e \
  v4l2src device=/dev/video4 num-buffers=1 ! \
  video/x-raw,format=YUY2,width=1600,height=1200,framerate=5/1 ! \
  filesink location=frame.yuyv
```

### Vista previa más rápida con MJPEG

Como YUYV está limitado a frecuencias de imagen bajas en alta resolución, usa MJPEG cuando solo necesites una vista previa fluida en tiempo real:

```bash theme={null}
gst-launch-1.0 \
  v4l2src device=/dev/video4 ! \
  image/jpeg,width=1600,height=1200,framerate=30/1 ! \
  jpegdec ! \
  videoconvert ! \
  autovideosink
```

## Extraer la luminancia en OpenCV / Python

Si procesas fotogramas raw en etapas posteriores y tu sensor es monocromático, extrae el canal de luminancia en lugar de tratar el fotograma como color.

```python theme={null}
# YUYV frame loaded as a 3-channel array — the Y channel is the real image
gray = frame[:, :, 0]
```

O convierte explícitamente desde YUY2:

```python theme={null}
import cv2

gray = cv2.cvtColor(frame, cv2.COLOR_YUV2GRAY_YUY2)
```

<Card title="Guía de OpenCV" icon="https://github.com/opencv/opencv/wiki/logo/OpenCV_logo_no_text.png" href="/es/stellarHD/guides/opencv-stellarHD">
  Consulta nuestra guía completa sobre el uso de la stellarHD con OpenCV.
</Card>

## Solución de problemas

### El archivo de salida tiene un tamaño incorrecto

Un fotograma raw completo tiene exactamente `ancho × alto × 2` bytes. Un archivo más pequeño suele significar que la captura se interrumpió o que la resolución solicitada no es compatible en modo YUYV — comprueba `v4l2-ctl -d /dev/video4 --list-formats-ext`.

### La imagen convertida está torcida o distorsionada

El `-pixel_format` y `-video_size` pasados a FFmpeg deben coincidir exactamente con la captura. El video raw no tiene cabecera, así que cualquier discrepancia corrompe el diseño.

### La imagen se ve tintada en una cámara monocromática

Los canales de croma no contienen datos reales en un sensor monocromático. Vuelve a convertir con `-vf format=gray` (FFmpeg) o extrae el canal `Y` (OpenCV) como se muestra arriba.

### La frecuencia de imagen YUYV es demasiado baja

Es lo esperado — el video sin comprimir consume mucho ancho de banda. Reduce la resolución, baja la frecuencia de imagen o cambia a MJPEG para la visualización en vivo.
