command line option for avi output in turing.py
authorAlexander Mordvintsev <no@email>
Mon, 11 Jul 2011 08:06:51 +0000 (08:06 +0000)
committerAlexander Mordvintsev <no@email>
Mon, 11 Jul 2011 08:06:51 +0000 (08:06 +0000)
samples/python2/turing.py

index f190c3d..d610afe 100644 (file)
@@ -6,9 +6,26 @@ Inspired by http://www.jonathanmccabe.com/Cyclic_Symmetric_Multi-Scale_Turing_Pa
 import numpy as np\r
 import cv2, cv\r
 from common import draw_str\r
+import getopt, sys\r
+from itertools import count\r
+\r
+help_message = '''\r
+USAGE: turing.py [-o <output.avi>]\r
+\r
+Press ESC to stop.\r
+'''\r
+print help_message\r
 \r
 w, h = 512, 512\r
 \r
+args, args_list = getopt.getopt(sys.argv[1:], 'o:', [])\r
+args = dict(args)\r
+out = None\r
+if '-o' in args:\r
+    fn = args['-o']\r
+    out = cv2.VideoWriter(args['-o'], cv.CV_FOURCC(*'DIB '), 30.0, (w, h), False)\r
+    print 'writing %s ...' % fn\r
+\r
 a = np.zeros((h, w), np.float32)\r
 cv2.randu(a, np.array([0]), np.array([1]))\r
 \r
@@ -19,12 +36,8 @@ def process_scale(a_lods, lod):
     v = cv2.GaussianBlur(d*d, (3, 3), 0)\r
     return np.sign(d), v\r
     \r
-print 'Generating AVI file. Press ESC to stop.'\r
-out = cv2.VideoWriter('turing.avi', cv.CV_FOURCC(*'DIB '), 30.0, (w, h), False)\r
-\r
 scale_num = 6\r
-frame_num = 1000\r
-for frame_i in xrange(frame_num):\r
+for frame_i in count():\r
     a_lods = [a]\r
     for i in xrange(scale_num):\r
         a_lods.append(cv2.pyrDown(a_lods[-1])) \r
@@ -37,12 +50,10 @@ for frame_i in xrange(frame_num):
     a += np.choose(mi, ms) * 0.025\r
     a = (a-a.min()) / a.ptp()\r
 \r
-    out.write(a)\r
+    if out:\r
+        out.write(a)\r
     vis = a.copy()\r
-    draw_str(vis, (20, 20), 'frame %d / %d' % (frame_i+1, frame_num))\r
+    draw_str(vis, (20, 20), 'frame %d' % frame_i)\r
     cv2.imshow('a', vis)\r
     if cv2.waitKey(5) == 27:\r
         break\r
-else:\r
-    print 'done'\r
-    cv2.waitKey()
\ No newline at end of file