เครื่องกำเนิดภาพแบบสุ่ม


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 อยู่เสมอ ผมทำอะไรผิดหรือเปล่า ?

เป้าหมายสุดท้ายของฉันคือการสร้างภาพอย่างน้อยหนึ่งภาพด้วยข้อมูลแบบสุ่ม


กำหนด "สุ่ม" ค่าเฉลี่ยแบบภาพของกลุ่มของค่า RGB แบบสุ่มจะมีแนวโน้มเป็นสีเทาหลังจากทั้งหมด
สัญลักษณ์แทน

นั่นคือสิ่งที่ฉันคิด แต่ฉันไม่สามารถยืนยันทฤษฎีนี้ได้เนื่องจากทุกภาพมีลักษณะเกือบเหมือนกัน
pxoto

15 ปีที่แล้วฉันทำสิ่งที่คล้ายกันในระดับพื้นฐาน (Chipmunk Basic เพื่อเฉพาะเจาะจง) ฉันมีหน้าต่างกราฟิกขนาดเล็กและเอาท์พุทพิกเซลของสีแบบสุ่มไปยังตำแหน่งสุ่ม ผลที่ได้คือภาพที่เปลี่ยนแปลงตลอดเวลาซึ่งยังคงเหมือนเดิมตลอดเวลา - เหมือนสีคงที่ในทีวีแบบเก่า มันไม่ได้จริงๆสีเทา แต่คงสี
สัญลักษณ์ตัวแทน

ฉันจัดการเพื่อสร้างแบบคงที่ แต่ภาพส่วนใหญ่ยังคงเป็นสีเทา
pxoto

คำตอบ:


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

ฉันไม่อยากเชื่อว่าคุณจะแก้ไขมันได้จริงฉันจะศึกษาคำสั่งเพื่อหาวิธีการใช้งาน
pxoto
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.