work on demo.py shell
authorAlexander Mordvintsev <no@email>
Sat, 20 Aug 2011 19:54:03 +0000 (19:54 +0000)
committerAlexander Mordvintsev <no@email>
Sat, 20 Aug 2011 19:54:03 +0000 (19:54 +0000)
samples/python2/browse.py
samples/python2/color_histogram.py
samples/python2/demo.py [new file with mode: 0644]
samples/python2/edge.py
samples/python2/turing.py

index 64f23b8..9ce4599 100644 (file)
@@ -1,38 +1,47 @@
 '''\r
-browse.py shows how to implement a simple hi resolution image navigation\r
+browse.py\r
+=========\r
+\r
+Sample shows how to implement a simple hi resolution image navigation\r
+\r
+Usage\r
+-----\r
+browse.py [image filename]\r
+\r
 '''\r
 \r
 import numpy as np\r
 import cv2\r
 import sys\r
 \r
-print 'This sample shows how to implement a simple hi resolution image navigation.'\r
-print 'USAGE: browse.py [image filename]'\r
-print \r
-\r
-if len(sys.argv) > 1:\r
-    fn = sys.argv[1]\r
-    print 'loading %s ...' % fn\r
-    img = cv2.imread(fn)\r
-else:\r
-    sz = 4096\r
-    print 'generating %dx%d procedural image ...' % (sz, sz)\r
-    img = np.zeros((sz, sz), np.uint8)\r
-    track = np.cumsum(np.random.rand(500000, 2)-0.5, axis=0)\r
-    track = np.int32(track*10 + (sz/2, sz/2))\r
-    cv2.polylines(img, [track], 0, 255, 1, cv2.CV_AA)\r
-\r
-small = img\r
-for i in xrange(3):\r
-    small = cv2.pyrDown(small)\r
-\r
-def onmouse(event, x, y, flags, param):\r
-    h, w = img.shape[:2]\r
-    h1, w1 = small.shape[:2]\r
-    x, y = 1.0*x*h/h1, 1.0*y*h/h1\r
-    zoom = cv2.getRectSubPix(img, (800, 600), (x+0.5, y+0.5))\r
-    cv2.imshow('zoom', zoom)\r
-\r
-cv2.imshow('preview', small)\r
-cv2.setMouseCallback('preview', onmouse)\r
-cv2.waitKey()\r
+if __name__ == '__main__':\r
+    print 'This sample shows how to implement a simple hi resolution image navigation.'\r
+    print 'USAGE: browse.py [image filename]'\r
+    print \r
+\r
+    if len(sys.argv) > 1:\r
+        fn = sys.argv[1]\r
+        print 'loading %s ...' % fn\r
+        img = cv2.imread(fn)\r
+    else:\r
+        sz = 4096\r
+        print 'generating %dx%d procedural image ...' % (sz, sz)\r
+        img = np.zeros((sz, sz), np.uint8)\r
+        track = np.cumsum(np.random.rand(500000, 2)-0.5, axis=0)\r
+        track = np.int32(track*10 + (sz/2, sz/2))\r
+        cv2.polylines(img, [track], 0, 255, 1, cv2.CV_AA)\r
+\r
+    small = img\r
+    for i in xrange(3):\r
+        small = cv2.pyrDown(small)\r
+\r
+    def onmouse(event, x, y, flags, param):\r
+        h, w = img.shape[:2]\r
+        h1, w1 = small.shape[:2]\r
+        x, y = 1.0*x*h/h1, 1.0*y*h/h1\r
+        zoom = cv2.getRectSubPix(img, (800, 600), (x+0.5, y+0.5))\r
+        cv2.imshow('zoom', zoom)\r
+\r
+    cv2.imshow('preview', small)\r
+    cv2.setMouseCallback('preview', onmouse)\r
+    cv2.waitKey()\r
index 87041fc..7038dc6 100644 (file)
@@ -5,47 +5,43 @@ import sys
 \r
 import video\r
 \r
-hsv_map = np.zeros((180, 256, 3), np.uint8)\r
-h, s = np.indices(hsv_map.shape[:2])\r
-hsv_map[:,:,0] = h\r
-hsv_map[:,:,1] = s\r
-hsv_map[:,:,2] = 255\r
-hsv_map = cv2.cvtColor(hsv_map, cv2.COLOR_HSV2BGR)\r
-cv2.imshow('hsv_map', hsv_map)\r
-\r
-cv2.namedWindow('hist', 0)\r
-hist_scale = 10\r
-def set_scale(val):\r
-    global hist_scale\r
-    hist_scale = val\r
-cv2.createTrackbar('scale', 'hist', hist_scale, 32, set_scale)\r
-\r
-try: fn = sys.argv[1]\r
-except: fn = 'synth:bg=../cpp/baboon.jpg:class=chess:noise=0.05'\r
-cam = video.create_capture(fn)\r
-\r
-t = clock()\r
-while True:\r
-    flag, frame = cam.read()\r
-    cv2.imshow('camera', frame)\r
-    \r
-    small = cv2.pyrDown(frame)\r
-\r
-    hsv = cv2.cvtColor(small, cv2.COLOR_BGR2HSV)\r
-    dark = hsv[...,2] < 32\r
-    hsv[dark] = 0\r
-    h = cv2.calcHist( [hsv], [0, 1], None, [180, 256], [0, 180, 0, 256] )\r
-\r
-\r
-    h = np.clip(h*0.005*hist_scale, 0, 1)\r
-    vis = hsv_map*h[:,:,np.newaxis] / 255.0\r
-    cv2.imshow('hist', vis)\r
-    \r
-\r
-    t1 = clock()\r
-    #print (t1-t)*1000\r
-    t = t1\r
-\r
-    ch = cv2.waitKey(1)\r
-    if ch == 27:\r
-        break\r
+if __name__ == '__main__':\r
+\r
+    hsv_map = np.zeros((180, 256, 3), np.uint8)\r
+    h, s = np.indices(hsv_map.shape[:2])\r
+    hsv_map[:,:,0] = h\r
+    hsv_map[:,:,1] = s\r
+    hsv_map[:,:,2] = 255\r
+    hsv_map = cv2.cvtColor(hsv_map, cv2.COLOR_HSV2BGR)\r
+    cv2.imshow('hsv_map', hsv_map)\r
+\r
+    cv2.namedWindow('hist', 0)\r
+    hist_scale = 10\r
+    def set_scale(val):\r
+        global hist_scale\r
+        hist_scale = val\r
+    cv2.createTrackbar('scale', 'hist', hist_scale, 32, set_scale)\r
+\r
+    try: fn = sys.argv[1]\r
+    except: fn = 'synth:bg=../cpp/baboon.jpg:class=chess:noise=0.05'\r
+    cam = video.create_capture(fn)\r
+\r
+    while True:\r
+        flag, frame = cam.read()\r
+        cv2.imshow('camera', frame)\r
+        \r
+        small = cv2.pyrDown(frame)\r
+\r
+        hsv = cv2.cvtColor(small, cv2.COLOR_BGR2HSV)\r
+        dark = hsv[...,2] < 32\r
+        hsv[dark] = 0\r
+        h = cv2.calcHist( [hsv], [0, 1], None, [180, 256], [0, 180, 0, 256] )\r
+\r
+\r
+        h = np.clip(h*0.005*hist_scale, 0, 1)\r
+        vis = hsv_map*h[:,:,np.newaxis] / 255.0\r
+        cv2.imshow('hist', vis)\r
+        \r
+        ch = cv2.waitKey(1)\r
+        if ch == 27:\r
+            break\r
diff --git a/samples/python2/demo.py b/samples/python2/demo.py
new file mode 100644 (file)
index 0000000..4365d7c
--- /dev/null
@@ -0,0 +1,132 @@
+import Tkinter as tk\r
+from ScrolledText import ScrolledText\r
+from glob import glob\r
+from common import splitfn\r
+\r
+#from IPython.Shell import IPShellEmbed\r
+#ipshell = IPShellEmbed()\r
+\r
+exclude_list = ['demo', 'common']\r
+\r
+class LinkManager:\r
+    def __init__(self, text, url_callback = None):\r
+        self.text = text\r
+        self.text.tag_config("link", foreground="blue", underline=1)\r
+        self.text.tag_bind("link", "<Enter>", self._enter)\r
+        self.text.tag_bind("link", "<Leave>", self._leave)\r
+        self.text.tag_bind("link", "<Button-1>", self._click)\r
+\r
+        self.url_callback = url_callback\r
+        self.reset()\r
+\r
+    def reset(self):\r
+        self.links = {}\r
+    def add(self, action):\r
+        # add an action to the manager.  returns tags to use in\r
+        # associated text widget\r
+        tag = "link-%d" % len(self.links)\r
+        self.links[tag] = action\r
+        return "link", tag\r
+\r
+    def _enter(self, event):\r
+        self.text.config(cursor="hand2")\r
+    def _leave(self, event):\r
+        self.text.config(cursor="")\r
+    def _click(self, event):\r
+        for tag in self.text.tag_names(tk.CURRENT):\r
+            if tag.startswith("link-"):\r
+                proc = self.links[tag]\r
+                if callable(proc):\r
+                    proc()\r
+                else:\r
+                    if self.url_callback:\r
+                        self.url_callback(proc)\r
+\r
+class App:\r
+    def __init__(self):\r
+        root = tk.Tk()\r
+        root.title('OpenCV Demo')\r
+\r
+        self.win = win = tk.PanedWindow(root, orient=tk.HORIZONTAL, sashrelief=tk.RAISED, sashwidth=4)\r
+        self.win.pack(fill=tk.BOTH, expand=1)\r
+\r
+        left = tk.Frame(win)\r
+        right = tk.Frame(win)                 \r
+        win.add(left)\r
+        win.add(right)\r
+                            \r
+        scrollbar = tk.Scrollbar(left, orient=tk.VERTICAL)\r
+        self.demos_lb = demos_lb = tk.Listbox(left, yscrollcommand=scrollbar.set)\r
+        scrollbar.config(command=demos_lb.yview)\r
+        scrollbar.pack(side=tk.RIGHT, fill=tk.Y)\r
+        demos_lb.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)\r
+        \r
+        self.samples = {}\r
+        for fn in glob('*.py'):\r
+            name = splitfn(fn)[1]\r
+            if fn[0] != '_' and name not in exclude_list:\r
+                demos_lb.insert(tk.END, name)\r
+                self.samples[name] = fn\r
+        demos_lb.bind('<<ListboxSelect>>', self.on_demo_select)\r
+\r
+        self.text = text = ScrolledText(right, font=('arial', 12, 'normal'), width = 30, wrap='word')\r
+        text.pack(fill='both', expand=1)\r
+        self.linker = linker = LinkManager(text, self.on_link)\r
+\r
+        self.text.tag_config("header1", font=('arial', 14, 'bold'))\r
+        self.text.tag_config("header2", font=('arial', 12, 'bold'))\r
+\r
+        text.config(state='disabled')\r
+\r
+    def on_link(self, url):\r
+        print url\r
+\r
+    def on_demo_select(self, evt):\r
+        name = self.demos_lb.get( self.demos_lb.curselection()[0] )\r
+        fn = self.samples[name]\r
+        loc = {}\r
+        execfile(fn, loc)\r
+        descr = loc.get('__doc__', 'no-description')\r
+        \r
+        self.linker.reset()\r
+        self.text.config(state='normal')\r
+        self.text.delete(1.0, tk.END)\r
+        self.format_text(descr)\r
+        self.text.config(state='disabled')\r
+\r
+    def format_text(self, s):\r
+        text = self.text\r
+        lines = s.splitlines()\r
+        for i, s in enumerate(lines):\r
+            s = s.rstrip()\r
+            if i == 0 and not s:\r
+                continue\r
+            sn = len(s)\r
+            if s and s == '='*sn:\r
+                text.tag_add('header1', 'end-2l', 'end-1l')\r
+            elif s and s == '-'*sn:\r
+                text.tag_add('header2', 'end-2l', 'end-1l')\r
+            else:\r
+                text.insert('end', s+'\n')\r
+\r
+    def format_line(self, s):\r
+        text = self.text\r
+        pos, n = 0, len(s)\r
+        while pos < n:\r
+            next = s.find('http://', pos)\r
+            if next < 0:\r
+                next = n\r
+                test.insert(tk.END, s[pos:next])\r
+            pos = next\r
+        \r
+\r
+        #text.insert(tk.END, "click here!", linker.add('http://asdfsdaf')) \r
+        \r
+\r
+\r
+    def run(self):\r
+        tk.mainloop()\r
+\r
+\r
+if __name__ == '__main__':\r
+    App().run()\r
index 9b72dd8..cd5d216 100644 (file)
@@ -2,28 +2,29 @@ import cv2
 import video\r
 import sys\r
 \r
-try: fn = sys.argv[1]\r
-except: fn = video.presets['chess']\r
+if __name__ == '__main__':\r
+    try: fn = sys.argv[1]\r
+    except: fn = video.presets['chess']\r
 \r
-def nothing(*arg):\r
-    pass\r
+    def nothing(*arg):\r
+        pass\r
 \r
-cv2.namedWindow('edge')\r
-cv2.createTrackbar('thrs1', 'edge', 2000, 5000, nothing)\r
-cv2.createTrackbar('thrs2', 'edge', 4000, 5000, nothing)\r
+    cv2.namedWindow('edge')\r
+    cv2.createTrackbar('thrs1', 'edge', 2000, 5000, nothing)\r
+    cv2.createTrackbar('thrs2', 'edge', 4000, 5000, nothing)\r
 \r
-cap = video.create_capture(fn)\r
-while True:\r
-    flag, img = cap.read()\r
-    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\r
-    thrs1 = cv2.getTrackbarPos('thrs1', 'edge')\r
-    thrs2 = cv2.getTrackbarPos('thrs2', 'edge')\r
-    edge = cv2.Canny(gray, thrs1, thrs2, apertureSize=5)\r
-    vis = img.copy()\r
-    vis /= 2\r
-    vis[edge != 0] = (0, 255, 0)\r
-    cv2.imshow('edge', vis)\r
-    ch = cv2.waitKey(5)\r
-    if ch == 27:\r
-        break\r
+    cap = video.create_capture(fn)\r
+    while True:\r
+        flag, img = cap.read()\r
+        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\r
+        thrs1 = cv2.getTrackbarPos('thrs1', 'edge')\r
+        thrs2 = cv2.getTrackbarPos('thrs2', 'edge')\r
+        edge = cv2.Canny(gray, thrs1, thrs2, apertureSize=5)\r
+        vis = img.copy()\r
+        vis /= 2\r
+        vis[edge != 0] = (0, 255, 0)\r
+        cv2.imshow('edge', vis)\r
+        ch = cv2.waitKey(5)\r
+        if ch == 27:\r
+            break\r
 \r
index f04c5a1..af9b9de 100644 (file)
@@ -15,46 +15,48 @@ USAGE: turing.py [-o <output.avi>]
 \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
-def process_scale(a_lods, lod):\r
-    d = a_lods[lod] - cv2.pyrUp(a_lods[lod+1])\r
-    for i in xrange(lod):\r
-        d = cv2.pyrUp(d)\r
-    v = cv2.GaussianBlur(d*d, (3, 3), 0)\r
-    return np.sign(d), v\r
-    \r
-scale_num = 6\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
-    ms, vs = [], []\r
-    for i in xrange(1, scale_num):\r
-        m, v = process_scale(a_lods, i)\r
-        ms.append(m)\r
-        vs.append(v)\r
-    mi = np.argmin(vs, 0)\r
-    a += np.choose(mi, ms) * 0.025\r
-    a = (a-a.min()) / a.ptp()\r
-\r
-    if out:\r
-        out.write(a)\r
-    vis = a.copy()\r
-    draw_str(vis, (20, 20), 'frame %d' % frame_i)\r
-    cv2.imshow('a', vis)\r
-    if cv2.waitKey(5) == 27:\r
-        break\r
+\r
+if __name__ == '__main__':\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
+    def process_scale(a_lods, lod):\r
+        d = a_lods[lod] - cv2.pyrUp(a_lods[lod+1])\r
+        for i in xrange(lod):\r
+            d = cv2.pyrUp(d)\r
+        v = cv2.GaussianBlur(d*d, (3, 3), 0)\r
+        return np.sign(d), v\r
+        \r
+    scale_num = 6\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
+        ms, vs = [], []\r
+        for i in xrange(1, scale_num):\r
+            m, v = process_scale(a_lods, i)\r
+            ms.append(m)\r
+            vs.append(v)\r
+        mi = np.argmin(vs, 0)\r
+        a += np.choose(mi, ms) * 0.025\r
+        a = (a-a.min()) / a.ptp()\r
+\r
+        if out:\r
+            out.write(a)\r
+        vis = a.copy()\r
+        draw_str(vis, (20, 20), 'frame %d' % frame_i)\r
+        cv2.imshow('a', vis)\r
+        if cv2.waitKey(5) == 27:\r
+            break\r