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.