morphology python sample
authorAlexander Mordvintsev <no@email>
Fri, 1 Jul 2011 08:22:45 +0000 (08:22 +0000)
committerAlexander Mordvintsev <no@email>
Fri, 1 Jul 2011 08:22:45 +0000 (08:22 +0000)
samples/python2/common.py
samples/python2/morphology.py

index b32d60b..5981fa9 100644 (file)
@@ -54,3 +54,6 @@ def mtx2rvec(R):
     axis = np.cross(vt[0], vt[1])\r
     return axis * np.arctan2(s, c)\r
 \r
+def draw_str(dst, (x, y), s):\r
+    cv2.putText(dst, s, (x+1, y+1), cv2.FONT_HERSHEY_PLAIN, 1.0, (0, 0, 0), thickness = 2, linetype=cv2.CV_AA)\r
+    cv2.putText(dst, s, (x, y), cv2.FONT_HERSHEY_PLAIN, 1.0, (255, 255, 255), linetype=cv2.CV_AA)\r
index f651f4f..5192ba4 100644 (file)
@@ -1,19 +1,58 @@
 import numpy as np\r
 import cv2\r
 \r
-img = cv2.imread('../cpp/baboon.jpg', False)\r
 \r
-def callback(k):\r
-    k = 2*(k-10)\r
-    st = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (abs(k), abs(k)))\r
-    op = cv2.MORPH_BLACKHAT\r
-    if k > 0:\r
-        op = cv2.MORPH_TOPHAT\r
-    res = cv2.morphologyEx(img, op, st)\r
-    cv2.imshow('img', res)\r
+if __name__ == '__main__':\r
+    import sys\r
+    from itertools import cycle\r
+    from common import draw_str\r
 \r
-callback(20)\r
-cv2.createTrackbar('k', 'img', 10, 20, callback)\r
+    try: fn = sys.argv[1]\r
+    except: fn = '../cpp/baboon.jpg'\r
+    img = cv2.imread(fn)\r
 \r
+    modes = cycle(['erode/dilate', 'open/close', 'blackhat/tophat', 'gradient'])\r
+    str_modes = cycle(['ellipse', 'rect', 'cross'])\r
+    cur_mode = modes.next()\r
+    cur_str_mode = str_modes.next()\r
 \r
-cv2.waitKey()\r
+    def update(dummy=None):\r
+        sz = cv2.getTrackbarPos('op/size', 'morphology')\r
+        iters = cv2.getTrackbarPos('iters', 'morphology')\r
+        opers = cur_mode.split('/')\r
+        if len(opers) > 1:\r
+            sz = sz - 10\r
+            op = opers[sz > 0]\r
+            sz = abs(sz)\r
+        else:\r
+            op = opers[0]\r
+        sz = sz*2+1\r
+\r
+        str_name = 'MORPH_' + cur_str_mode.upper()\r
+        oper_name = 'MORPH_' + op.upper()\r
+        st = cv2.getStructuringElement(getattr(cv2, str_name), (sz, sz))\r
+        res = cv2.morphologyEx(img, getattr(cv2, oper_name), st, iterations=iters)\r
+        \r
+        draw_str(res, (10, 20), 'mode: ' + cur_mode)\r
+        draw_str(res, (10, 40), 'operation: ' + oper_name)\r
+        draw_str(res, (10, 60), 'structure: ' + str_name)\r
+        draw_str(res, (10, 80), 'ksize: %d  iters: %d' % (sz, iters))\r
+        cv2.imshow('morphology', res)\r
+\r
+    cv2.namedWindow('morphology')\r
+    cv2.createTrackbar('op/size', 'morphology', 12, 20, update)\r
+    cv2.createTrackbar('iters', 'morphology', 1, 10, update)\r
+    update()\r
+    print "Controls:"\r
+    print "  1 - change operation"\r
+    print "  2 - change structure element shape"\r
+    print\r
+    while True:\r
+        ch = cv2.waitKey()\r
+        if ch == 27:\r
+            break\r
+        if ch == ord('1'):\r
+            cur_mode = modes.next()\r
+        if ch == ord('2'):\r
+            cur_str_mode = str_modes.next()\r
+        update()\r