python cv2:
authorAlexander Mordvintsev <no@email>
Tue, 7 Jun 2011 13:45:31 +0000 (13:45 +0000)
committerAlexander Mordvintsev <no@email>
Tue, 7 Jun 2011 13:45:31 +0000 (13:45 +0000)
simple video capture and synth framework stub
edge detection sample

samples/python2/edge.py [new file with mode: 0644]
samples/python2/video.py [new file with mode: 0644]

diff --git a/samples/python2/edge.py b/samples/python2/edge.py
new file mode 100644 (file)
index 0000000..998c0c4
--- /dev/null
@@ -0,0 +1,29 @@
+import cv2, cv\r
+import video\r
+import sys\r
+\r
+try: fn = sys.argv[1]\r
+except: fn = 'synth:bg=../cpp/lena.jpg:noise=0.1'\r
+\r
+def nothing(*arg):\r
+    pass\r
+\r
+cv2.namedWindow('edge')\r
+cv.CreateTrackbar('thrs1', 'edge', 2000, 5000, nothing)\r
+cv.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, cv.CV_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
diff --git a/samples/python2/video.py b/samples/python2/video.py
new file mode 100644 (file)
index 0000000..5cbcb91
--- /dev/null
@@ -0,0 +1,59 @@
+import numpy as np\r
+import cv2\r
+\r
+class VideoSynth(object):\r
+    def __init__(self, size=None, noise=0.0, bg = None, **params):\r
+        self.bg = None\r
+        self.frame_size = (640, 480)\r
+        if bg is not None:\r
+            self.bg = cv2.imread(bg, 1)\r
+            h, w = self.bg.shape[:2]\r
+            self.frame_size = (w, h)\r
+            \r
+        if size is not None:\r
+            w, h = map(int, size.split('x'))\r
+            self.frame_size = (w, h)\r
+            self.bg = cv2.resize(bg, self.frame_size)\r
+\r
+        self.noise = float(noise)\r
+\r
+    def read(self, dst=None):\r
+        w, h = self.frame_size\r
+\r
+        buf = np.zeros((h, w, 3), np.uint8)\r
+        if self.bg is not None:\r
+            buf[:] = self.bg\r
+        if self.noise > 0.0:\r
+            noise = np.random.normal(scale = 255*self.noise, size=(h, w, 3))\r
+            buf = cv2.add(buf, noise, dtype=cv2.CV_8UC3)\r
+        return True, buf\r
+\r
+\r
+def create_capture(source):\r
+    '''\r
+      source: <int> or '<int>' or '<filename>' or 'synth:<params>'\r
+    '''\r
+    try: source = int(source)\r
+    except ValueError: pass\r
+    else:\r
+        return cv2.VideoCapture(source)\r
+    source = str(source).strip()\r
+    if source.startswith('synth'):\r
+        ss = filter(None, source.split(':'))\r
+        params = dict( s.split('=') for s in ss[1:] )\r
+        return VideoSynth(**params)\r
+    return cv2.VideoCapture(source)\r
+\r
+\r
+if __name__ == '__main__':\r
+    import sys\r
+    try: fn = sys.argv[1]\r
+    except: fn = 'synth:bg=../cpp/lena.jpg:noise=0.1'\r
+\r
+    cap = create_capture(fn)\r
+    while True:\r
+        ret, img = cap.read()\r
+        cv2.imshow('img', img)\r
+        ch = cv2.waitKey(1)\r
+        if ch == 27:\r
+            break\r