Generatore di immagini casuali


14

Sto generando dati casuali e sto provando a convertirli in un'immagine PNG usando:

head -c 1MB < /dev/urandom | hexdump -e '16/1 "_x%02X"' | sed 's/_/\\/g; s/\\x  //g; s/.*/    "&"/' | tr -d "\"" | display -depth 8 -size 1000x1000+0 rgb:-

Questo comando mostra sempre un'immagine grigiastra con alcuni pixel RGB. Che cosa sto facendo di sbagliato ?

Il mio obiettivo finale è quello di generare almeno un'immagine con dati casuali.


Definisci "casuale". Dopotutto, la media visiva di un gruppo di valori RGB casuali tenderà al grigio.
— Wildcard

Questo è quello che pensavo, ma non ho potuto confermare questa teoria poiché ogni immagine sembra quasi la stessa.
— pxoto,

15 anni fa ho fatto qualcosa di simile in Basic (Chipmunk Basic, per essere precisi). Avevo una piccola finestra grafica e continuavo a inviare un pixel di colore casuale in una posizione casuale. Il risultato è stato un'immagine in costante cambiamento che sembrava sostanzialmente la stessa per tutto il tempo, come un colore statico su una TV vecchio stile. Non è davvero grigio, ma di colore statico .
— Wildcard il

Sono riuscito a generare un po 'di elettricità statica ma le immagini sono per lo più ancora grigie.
— pxoto,

Risposte:


17

Innanzitutto, devi alimentare display RGB:-byte grezzi, non una stringa esadecimale codificata come quella che stai costruendo con quella hexdump | sed | trpipeline.

In secondo luogo, non si stanno fornendo abbastanza byte: sono necessari 3 byte per pixel, uno per ciascun canale di colore.

Questo fa quello che vuoi:

mx=320;my=256;head -c "$((3*mx*my))" /dev/urandom | display -depth 8 -size "${mx}x${my}" RGB:-

Per salvare direttamente in PNG, puoi farlo:

mx=320;my=256;head -c "$((3*mx*my))" /dev/urandom | convert -depth 8 -size "${mx}x${my}" RGB:- random.png

Ecco un'immagine di output tipica:

Immagine RGB generata da / dev / urandom


Se desideri creare un'animazione, non è necessario creare e salvare singoli fotogrammi. È possibile alimentare un flusso di byte non elaborato direttamente su ffmpeg / avconv, ad es

mx=320; my=256; nframes=100; dd if=/dev/urandom bs="$((mx*my*3))" count="$nframes" | avconv -r 25 -s "${mx}x${my}" -f rawvideo -pix_fmt rgb24 -i - random.mp4

Non riesco a credere che tu l'abbia effettivamente risolto, studierò il comando per capire come funziona.
— pxoto,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.