Генератор случайных изображений

14

Я генерирую случайные данные и пытаюсь преобразовать их в изображение PNG, используя:

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:-

Эта команда всегда показывает сероватое изображение с некоторыми пикселями RGB. Что я делаю неправильно ?

Моя конечная цель - создать хотя бы одно изображение со случайными данными.

pxoto
источник
Определите «случайный». В конце концов, визуальное среднее группы случайных значений RGB будет стремиться к серому.
Подстановочный
Я так и думал, но не смог подтвердить эту теорию, поскольку каждая картина выглядит почти одинаково.
pxto
15 лет назад я делал нечто подобное в Basic (если быть точным, в Chipmunk Basic). У меня было небольшое графическое окно, и я постоянно выводил пиксель случайного цвета в случайное место. Результатом стала постоянно меняющаяся картина, которая все время выглядела практически одинаково - как цветная статика на старомодном телевизоре. Это не совсем серый, а статичный цвет .
Wildcard
Мне удалось создать некоторое статическое изображение, но изображения в основном все еще серые.
pxto

Ответы:

17

Во-первых, вам нужно передать display RGB:-необработанные байты, а не закодированную шестнадцатеричную строку, как вы строите с этим hexdump | sed | trконвейером.

Во-вторых, вы не даете ему достаточно байтов: вам нужно 3 байта на пиксель, по одному для каждого цветового канала.

Это делает то, что вы хотите:

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

Чтобы сохранить непосредственно в PNG, вы можете сделать это:

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

Вот типичное выходное изображение:

RGB изображение, сгенерированное из / dev / urandom


Если вы хотите сделать анимацию, нет необходимости создавать и сохранять отдельные кадры. Вы можете передать поток необработанных байтов прямо в ffmpeg / avconv, например

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
PM 2Ring
источник
Я не могу поверить, что вы действительно решили это, я буду изучать команду, чтобы выяснить, как она работает.
pxto