samples: fix python samples compatibility with demo.py
authorAlexander Alekhin <alexander.alekhin@intel.com>
Tue, 19 Mar 2019 18:03:58 +0000 (21:03 +0300)
committerAlexander Alekhin <alexander.alekhin@intel.com>
Wed, 20 Mar 2019 15:32:34 +0000 (18:32 +0300)
48 files changed:
samples/python/asift.py
samples/python/browse.py
samples/python/calibrate.py
samples/python/camera_calibration_show_extrinsics.py
samples/python/camshift.py
samples/python/coherence.py
samples/python/color_histogram.py
samples/python/contours.py
samples/python/deconvolution.py
samples/python/dft.py
samples/python/digits.py
samples/python/digits_adjust.py
samples/python/digits_video.py
samples/python/distrans.py
samples/python/edge.py
samples/python/facedetect.py
samples/python/find_obj.py
samples/python/fitline.py
samples/python/floodfill.py
samples/python/gabor_threads.py
samples/python/gaussian_mix.py
samples/python/grabcut.py
samples/python/hist.py
samples/python/houghcircles.py
samples/python/houghlines.py
samples/python/inpaint.py
samples/python/kalman.py
samples/python/kmeans.py
samples/python/lappyr.py
samples/python/letter_recog.py
samples/python/lk_homography.py
samples/python/lk_track.py
samples/python/logpolar.py
samples/python/morphology.py
samples/python/mouse_and_match.py
samples/python/mser.py
samples/python/opencv_version.py
samples/python/opt_flow.py
samples/python/peopledetect.py
samples/python/squares.py
samples/python/stereo_match.py
samples/python/texture_flow.py
samples/python/tst_scene_render.py
samples/python/turing.py
samples/python/video.py
samples/python/video_threaded.py
samples/python/video_v4l2.py
samples/python/watershed.py

index 8555ed7..e21ef5b 100755 (executable)
@@ -106,9 +106,8 @@ def affine_detect(detector, img, mask=None, pool=None):
     print()
     return keypoints, np.array(descrs)
 
-if __name__ == '__main__':
-    print(__doc__)
 
+def main():
     import sys, getopt
     opts, args = getopt.getopt(sys.argv[1:], '', ['feature='])
     opts = dict(opts)
@@ -160,4 +159,10 @@ if __name__ == '__main__':
 
     match_and_draw('affine find_obj')
     cv.waitKey()
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index 35d1c27..14bd05a 100755 (executable)
@@ -26,11 +26,7 @@ import cv2 as cv
 # built-in modules
 import sys
 
-if __name__ == '__main__':
-    print('This sample shows how to implement a simple hi resolution image navigation.')
-    print('USAGE: browse.py [image filename]')
-    print()
-
+def main():
     if len(sys.argv) > 1:
         fn = cv.samples.findFile(sys.argv[1])
         print('loading %s ...' % fn)
@@ -62,4 +58,10 @@ if __name__ == '__main__':
     cv.imshow('preview', small)
     cv.setMouseCallback('preview', onmouse)
     cv.waitKey()
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index e0896ea..2378d8b 100755 (executable)
@@ -25,7 +25,7 @@ from common import splitfn
 # built-in modules
 import os
 
-if __name__ == '__main__':
+def main():
     import sys
     import getopt
     from glob import glob
@@ -126,4 +126,10 @@ if __name__ == '__main__':
         print('Undistorted image written to: %s' % outfile)
         cv.imwrite(outfile, dst)
 
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index 6304aa7..610138b 100755 (executable)
@@ -1,14 +1,14 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
-from mpl_toolkits.mplot3d import Axes3D
-import matplotlib.pyplot as plt
+# Python 2/3 compatibility
+from __future__ import print_function
+
 import numpy as np
-from matplotlib import cm
-from numpy import linspace
-import argparse
 import cv2 as cv
 
+from numpy import linspace
+
 def inverse_homogeneoux_matrix(M):
     R = M[0:3, 0:3]
     T = M[0:3, 3]
@@ -119,6 +119,8 @@ def create_board_model(extrinsics, board_width, board_height, square_size, draw_
 def draw_camera_boards(ax, camera_matrix, cam_width, cam_height, scale_focal,
                        extrinsics, board_width, board_height, square_size,
                        patternCentric):
+    from matplotlib import cm
+
     min_values = np.zeros((3,1))
     min_values = np.inf
     max_values = np.zeros((3,1))
@@ -158,6 +160,8 @@ def draw_camera_boards(ax, camera_matrix, cam_width, cam_height, scale_focal,
     return min_values, max_values
 
 def main():
+    import argparse
+
     parser = argparse.ArgumentParser(description='Plot camera calibration extrinsics.',
                                      formatter_class=argparse.ArgumentDefaultsHelpFormatter)
     parser.add_argument('--calibration', type=str, default='left_intrinsics.yml',
@@ -179,6 +183,9 @@ def main():
     camera_matrix = fs.getNode('camera_matrix').mat()
     extrinsics = fs.getNode('extrinsic_parameters').mat()
 
+    import matplotlib.pyplot as plt
+    from mpl_toolkits.mplot3d import Axes3D
+
     fig = plt.figure()
     ax = fig.gca(projection='3d')
     ax.set_aspect("equal")
@@ -211,6 +218,10 @@ def main():
     ax.set_title('Extrinsic Parameters Visualization')
 
     plt.show()
+    print('Done')
+
 
-if __name__ == "__main__":
+if __name__ == '__main__':
+    print(__doc__)
     main()
+    cv.destroyAllWindows()
index 5805512..101da85 100755 (executable)
@@ -119,10 +119,10 @@ class App(object):
 
 
 if __name__ == '__main__':
+    print(__doc__)
     import sys
     try:
         video_src = sys.argv[1]
     except:
         video_src = 0
-    print(__doc__)
     App(video_src).run()
index 59db351..147b33e 100755 (executable)
@@ -46,7 +46,7 @@ def coherence_filter(img, sigma = 11, str_sigma = 11, blend = 0.5, iter_n = 4):
     return img
 
 
-if __name__ == '__main__':
+def main():
     import sys
     try:
         fn = sys.argv[1]
@@ -82,4 +82,11 @@ if __name__ == '__main__':
             update()
         if ch == 27:
             break
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index 3a2e532..0422d72 100755 (executable)
@@ -8,6 +8,9 @@ Keys:
 
 '''
 
+# Python 2/3 compatibility
+from __future__ import print_function
+
 import numpy as np
 import cv2 as cv
 
@@ -17,46 +20,54 @@ import sys
 # local modules
 import video
 
-if __name__ == '__main__':
+class App():
+
+    def set_scale(self, val):
+        self.hist_scale = val
+
+    def run(self):
+        hsv_map = np.zeros((180, 256, 3), np.uint8)
+        h, s = np.indices(hsv_map.shape[:2])
+        hsv_map[:,:,0] = h
+        hsv_map[:,:,1] = s
+        hsv_map[:,:,2] = 255
+        hsv_map = cv.cvtColor(hsv_map, cv.COLOR_HSV2BGR)
+        cv.imshow('hsv_map', hsv_map)
+
+        cv.namedWindow('hist', 0)
+        self.hist_scale = 10
+
+        cv.createTrackbar('scale', 'hist', self.hist_scale, 32, self.set_scale)
+
+        try:
+            fn = sys.argv[1]
+        except:
+            fn = 0
+        cam = video.create_capture(fn, fallback='synth:bg=baboon.jpg:class=chess:noise=0.05')
+
+        while True:
+            flag, frame = cam.read()
+            cv.imshow('camera', frame)
 
-    hsv_map = np.zeros((180, 256, 3), np.uint8)
-    h, s = np.indices(hsv_map.shape[:2])
-    hsv_map[:,:,0] = h
-    hsv_map[:,:,1] = s
-    hsv_map[:,:,2] = 255
-    hsv_map = cv.cvtColor(hsv_map, cv.COLOR_HSV2BGR)
-    cv.imshow('hsv_map', hsv_map)
-
-    cv.namedWindow('hist', 0)
-    hist_scale = 10
-
-    def set_scale(val):
-        global hist_scale
-        hist_scale = val
-    cv.createTrackbar('scale', 'hist', hist_scale, 32, set_scale)
-
-    try:
-        fn = sys.argv[1]
-    except:
-        fn = 0
-    cam = video.create_capture(fn, fallback='synth:bg=baboon.jpg:class=chess:noise=0.05')
-
-    while True:
-        flag, frame = cam.read()
-        cv.imshow('camera', frame)
-
-        small = cv.pyrDown(frame)
-
-        hsv = cv.cvtColor(small, cv.COLOR_BGR2HSV)
-        dark = hsv[...,2] < 32
-        hsv[dark] = 0
-        h = cv.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])
-
-        h = np.clip(h*0.005*hist_scale, 0, 1)
-        vis = hsv_map*h[:,:,np.newaxis] / 255.0
-        cv.imshow('hist', vis)
-
-        ch = cv.waitKey(1)
-        if ch == 27:
-            break
+            small = cv.pyrDown(frame)
+
+            hsv = cv.cvtColor(small, cv.COLOR_BGR2HSV)
+            dark = hsv[...,2] < 32
+            hsv[dark] = 0
+            h = cv.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])
+
+            h = np.clip(h*0.005*self.hist_scale, 0, 1)
+            vis = hsv_map*h[:,:,np.newaxis] / 255.0
+            cv.imshow('hist', vis)
+
+            ch = cv.waitKey(1)
+            if ch == 27:
+                break
+
+        print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    App().run()
     cv.destroyAllWindows()
index 69b46d4..d6ddde0 100755 (executable)
@@ -48,9 +48,7 @@ def make_image():
         cv.ellipse( img, (dx+273, dy+100), (20,35), 0, 0, 360, white, -1 )
     return img
 
-if __name__ == '__main__':
-    print(__doc__)
-
+def main():
     img = make_image()
     h, w = img.shape[:2]
 
@@ -67,4 +65,10 @@ if __name__ == '__main__':
     cv.createTrackbar( "levels+3", "contours", 3, 7, update )
     cv.imshow('image', img)
     cv.waitKey()
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index 109f46c..bf136c5 100755 (executable)
@@ -65,8 +65,7 @@ def defocus_kernel(d, sz=65):
     return kern
 
 
-if __name__ == '__main__':
-    print(__doc__)
+def main():
     import sys, getopt
     opts, args = getopt.getopt(sys.argv[1:], '', ['circle', 'angle=', 'd=', 'snr='])
     opts = dict(opts)
@@ -128,3 +127,11 @@ if __name__ == '__main__':
         if ch == ord(' '):
             defocus = not defocus
             update(None)
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
+    cv.destroyAllWindows()
index d5a0f03..98bc87d 100755 (executable)
@@ -11,8 +11,9 @@ USAGE:
 # Python 2/3 compatibility
 from __future__ import print_function
 
-import cv2 as cv
 import numpy as np
+import cv2 as cv
+
 import sys
 
 
@@ -62,8 +63,8 @@ def shift_dft(src, dst=None):
 
     return dst
 
-if __name__ == "__main__":
 
+def main():
     if len(sys.argv) > 1:
         fname = sys.argv[1]
     else:
@@ -110,4 +111,10 @@ if __name__ == "__main__":
     cv.imshow("magnitude", log_spectrum)
 
     cv.waitKey(0)
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index ea9844e..f58e9dd 100755 (executable)
@@ -27,12 +27,12 @@ Usage:
 # Python 2/3 compatibility
 from __future__ import print_function
 
+import numpy as np
+import cv2 as cv
+
 # built-in modules
 from multiprocessing.pool import ThreadPool
 
-import cv2 as cv
-
-import numpy as np
 from numpy.linalg import norm
 
 # local modules
index 2e50fe8..1c041c1 100755 (executable)
@@ -23,6 +23,7 @@ if PY3:
 
 import numpy as np
 import cv2 as cv
+
 from multiprocessing.pool import ThreadPool
 
 from digits import *
index f976a32..dc035e4 100755 (executable)
@@ -96,6 +96,10 @@ def main():
         if ch == 27:
             break
 
+    print('Done')
+
+
 if __name__ == '__main__':
+    print(__doc__)
     main()
     cv.destroyAllWindows()
index 939ecfd..aa423a7 100755 (executable)
@@ -19,13 +19,12 @@ import cv2 as cv
 
 from common import make_cmap
 
-if __name__ == '__main__':
+def main():
     import sys
     try:
         fn = sys.argv[1]
     except:
         fn = 'fruits.jpg'
-    print(__doc__)
 
     fn = cv.samples.findFile(fn)
     img = cv.imread(fn, cv.IMREAD_GRAYSCALE)
@@ -69,4 +68,11 @@ if __name__ == '__main__':
             update()
         if need_update:
             update()
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index ae09c3c..ba04ade 100755 (executable)
@@ -23,9 +23,7 @@ import video
 import sys
 
 
-if __name__ == '__main__':
-    print(__doc__)
-
+def main():
     try:
         fn = sys.argv[1]
     except:
@@ -52,4 +50,11 @@ if __name__ == '__main__':
         ch = cv.waitKey(5)
         if ch == 27:
             break
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index 73d9341..1050cc5 100755 (executable)
@@ -30,9 +30,8 @@ def draw_rects(img, rects, color):
     for x1, y1, x2, y2 in rects:
         cv.rectangle(img, (x1, y1), (x2, y2), color, 2)
 
-if __name__ == '__main__':
+def main():
     import sys, getopt
-    print(__doc__)
 
     args, video_src = getopt.getopt(sys.argv[1:], '', ['cascade=', 'nested-cascade='])
     try:
@@ -70,4 +69,11 @@ if __name__ == '__main__':
 
         if cv.waitKey(5) == 27:
             break
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index d0c67b0..2fa9a34 100755 (executable)
@@ -19,6 +19,7 @@ from __future__ import print_function
 
 import numpy as np
 import cv2 as cv
+
 from common import anorm, getsize
 
 FLANN_INDEX_KDTREE = 1  # bug: flann enums are missing
@@ -137,9 +138,7 @@ def explore_match(win, img1, img2, kp_pairs, status = None, H = None):
     return vis
 
 
-if __name__ == '__main__':
-    print(__doc__)
-
+def main():
     import sys, getopt
     opts, args = getopt.getopt(sys.argv[1:], '', ['feature='])
     opts = dict(opts)
@@ -187,4 +186,11 @@ if __name__ == '__main__':
 
     match_and_draw('find_obj')
     cv.waitKey()
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index b8d282a..6705f39 100755 (executable)
@@ -79,9 +79,7 @@ def update(_=None):
     draw_str(img, (20, 20), cur_func_name)
     cv.imshow('fit line', img)
 
-if __name__ == '__main__':
-    print(__doc__)
-
+def main():
     cv.namedWindow('fit line')
     cv.createTrackbar('noise', 'fit line', 3, 50, update)
     cv.createTrackbar('point n', 'fit line', 100, 500, update)
@@ -96,3 +94,11 @@ if __name__ == '__main__':
                 cur_func_name = dist_func_names.next()
         if ch == 27:
             break
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
+    cv.destroyAllWindows()
index 29986c5..da4b009 100755 (executable)
@@ -20,61 +20,69 @@ from __future__ import print_function
 import numpy as np
 import cv2 as cv
 
-if __name__ == '__main__':
-    import sys
-    try:
-        fn = sys.argv[1]
-    except:
-        fn = 'fruits.jpg'
-    print(__doc__)
+import sys
 
-    img = cv.imread(cv.samples.findFile(fn))
-    if img is None:
-        print('Failed to load image file:', fn)
-        sys.exit(1)
+class App():
 
-    h, w = img.shape[:2]
-    mask = np.zeros((h+2, w+2), np.uint8)
-    seed_pt = None
-    fixed_range = True
-    connectivity = 4
-
-    def update(dummy=None):
-        if seed_pt is None:
-            cv.imshow('floodfill', img)
+    def update(self, dummy=None):
+        if self.seed_pt is None:
+            cv.imshow('floodfill', self.img)
             return
-        flooded = img.copy()
-        mask[:] = 0
+        flooded = self.img.copy()
+        self.mask[:] = 0
         lo = cv.getTrackbarPos('lo', 'floodfill')
         hi = cv.getTrackbarPos('hi', 'floodfill')
-        flags = connectivity
-        if fixed_range:
+        flags = self.connectivity
+        if self.fixed_range:
             flags |= cv.FLOODFILL_FIXED_RANGE
-        cv.floodFill(flooded, mask, seed_pt, (255, 255, 255), (lo,)*3, (hi,)*3, flags)
-        cv.circle(flooded, seed_pt, 2, (0, 0, 255), -1)
+        cv.floodFill(flooded, self.mask, self.seed_pt, (255, 255, 255), (lo,)*3, (hi,)*3, flags)
+        cv.circle(flooded, self.seed_pt, 2, (0, 0, 255), -1)
         cv.imshow('floodfill', flooded)
 
-    def onmouse(event, x, y, flags, param):
-        global seed_pt
+    def onmouse(self, event, x, y, flags, param):
         if flags & cv.EVENT_FLAG_LBUTTON:
-            seed_pt = x, y
-            update()
-
-    update()
-    cv.setMouseCallback('floodfill', onmouse)
-    cv.createTrackbar('lo', 'floodfill', 20, 255, update)
-    cv.createTrackbar('hi', 'floodfill', 20, 255, update)
-
-    while True:
-        ch = cv.waitKey()
-        if ch == 27:
-            break
-        if ch == ord('f'):
-            fixed_range = not fixed_range
-            print('using %s range' % ('floating', 'fixed')[fixed_range])
-            update()
-        if ch == ord('c'):
-            connectivity = 12-connectivity
-            print('connectivity =', connectivity)
-            update()
+            self.seed_pt = x, y
+            self.update()
+
+    def run(self):
+        try:
+            fn = sys.argv[1]
+        except:
+            fn = 'fruits.jpg'
+
+        self.img = cv.imread(cv.samples.findFile(fn))
+        if self.img is None:
+            print('Failed to load image file:', fn)
+            sys.exit(1)
+
+        h, w = self.img.shape[:2]
+        self.mask = np.zeros((h+2, w+2), np.uint8)
+        self.seed_pt = None
+        self.fixed_range = True
+        self.connectivity = 4
+
+        self.update()
+        cv.setMouseCallback('floodfill', self.onmouse)
+        cv.createTrackbar('lo', 'floodfill', 20, 255, self.update)
+        cv.createTrackbar('hi', 'floodfill', 20, 255, self.update)
+
+        while True:
+            ch = cv.waitKey()
+            if ch == 27:
+                break
+            if ch == ord('f'):
+                self.fixed_range = not self.fixed_range
+                print('using %s range' % ('floating', 'fixed')[self.fixed_range])
+                self.update()
+            if ch == ord('c'):
+                self.connectivity = 12-self.connectivity
+                print('connectivity =', self.connectivity)
+                self.update()
+
+        print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    App().run()
     cv.destroyAllWindows()
index 377fa9a..dd14e6b 100755 (executable)
@@ -19,6 +19,7 @@ from __future__ import print_function
 
 import numpy as np
 import cv2 as cv
+
 from multiprocessing.pool import ThreadPool
 
 
@@ -47,11 +48,10 @@ def process_threaded(img, filters, threadn = 8):
         np.maximum(accum, fimg, accum)
     return accum
 
-if __name__ == '__main__':
+def main():
     import sys
     from common import Timer
 
-    print(__doc__)
     try:
         img_fn = sys.argv[1]
     except:
@@ -73,4 +73,10 @@ if __name__ == '__main__':
     cv.imshow('img', img)
     cv.imshow('result', res2)
     cv.waitKey()
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index a939928..5f2dfcc 100755 (executable)
@@ -9,9 +9,10 @@ if PY3:
     xrange = range
 
 import numpy as np
-from numpy import random
 import cv2 as cv
 
+from numpy import random
+
 def make_gaussians(cluster_n, img_size):
     points = []
     ref_distrs = []
@@ -34,7 +35,7 @@ def draw_gaussain(img, mean, cov, color):
     cv.ellipse(img, (x, y), (s1, s2), ang, 0, 360, color, 1, cv.LINE_AA)
 
 
-if __name__ == '__main__':
+def main():
     cluster_n = 5
     img_size = 512
 
@@ -66,4 +67,11 @@ if __name__ == '__main__':
         ch = cv.waitKey(0)
         if ch == 27:
             break
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index 318e234..f63c0cb 100644 (file)
@@ -32,148 +32,154 @@ from __future__ import print_function
 
 import numpy as np
 import cv2 as cv
+
 import sys
 
-BLUE = [255,0,0]        # rectangle color
-RED = [0,0,255]         # PR BG
-GREEN = [0,255,0]       # PR FG
-BLACK = [0,0,0]         # sure BG
-WHITE = [255,255,255]   # sure FG
-
-DRAW_BG = {'color' : BLACK, 'val' : 0}
-DRAW_FG = {'color' : WHITE, 'val' : 1}
-DRAW_PR_FG = {'color' : GREEN, 'val' : 3}
-DRAW_PR_BG = {'color' : RED, 'val' : 2}
-
-# setting up flags
-rect = (0,0,1,1)
-drawing = False         # flag for drawing curves
-rectangle = False       # flag for drawing rect
-rect_over = False       # flag to check if rect drawn
-rect_or_mask = 100      # flag for selecting rect or mask mode
-value = DRAW_FG         # drawing initialized to FG
-thickness = 3           # brush thickness
-
-def onmouse(event,x,y,flags,param):
-    global img,img2,drawing,value,mask,rectangle,rect,rect_or_mask,ix,iy,rect_over
-
-    # Draw Rectangle
-    if event == cv.EVENT_RBUTTONDOWN:
-        rectangle = True
-        ix,iy = x,y
-
-    elif event == cv.EVENT_MOUSEMOVE:
-        if rectangle == True:
-            img = img2.copy()
-            cv.rectangle(img,(ix,iy),(x,y),BLUE,2)
-            rect = (min(ix,x),min(iy,y),abs(ix-x),abs(iy-y))
-            rect_or_mask = 0
-
-    elif event == cv.EVENT_RBUTTONUP:
-        rectangle = False
-        rect_over = True
-        cv.rectangle(img,(ix,iy),(x,y),BLUE,2)
-        rect = (min(ix,x),min(iy,y),abs(ix-x),abs(iy-y))
-        rect_or_mask = 0
-        print(" Now press the key 'n' a few times until no further change \n")
-
-    # draw touchup curves
-
-    if event == cv.EVENT_LBUTTONDOWN:
-        if rect_over == False:
-            print("first draw rectangle \n")
+class App():
+    BLUE = [255,0,0]        # rectangle color
+    RED = [0,0,255]         # PR BG
+    GREEN = [0,255,0]       # PR FG
+    BLACK = [0,0,0]         # sure BG
+    WHITE = [255,255,255]   # sure FG
+
+    DRAW_BG = {'color' : BLACK, 'val' : 0}
+    DRAW_FG = {'color' : WHITE, 'val' : 1}
+    DRAW_PR_FG = {'color' : GREEN, 'val' : 3}
+    DRAW_PR_BG = {'color' : RED, 'val' : 2}
+
+    # setting up flags
+    rect = (0,0,1,1)
+    drawing = False         # flag for drawing curves
+    rectangle = False       # flag for drawing rect
+    rect_over = False       # flag to check if rect drawn
+    rect_or_mask = 100      # flag for selecting rect or mask mode
+    value = DRAW_FG         # drawing initialized to FG
+    thickness = 3           # brush thickness
+
+    def onmouse(self, event, x, y, flags, param):
+        # Draw Rectangle
+        if event == cv.EVENT_RBUTTONDOWN:
+            self.rectangle = True
+            self.ix, self.iy = x,y
+
+        elif event == cv.EVENT_MOUSEMOVE:
+            if self.rectangle == True:
+                self.img = self.img2.copy()
+                cv.rectangle(self.img, (self.ix, self.iy), (x, y), self.BLUE, 2)
+                self.rect = (min(self.ix, x), min(self.iy, y), abs(self.ix - x), abs(self.iy - y))
+                self.rect_or_mask = 0
+
+        elif event == cv.EVENT_RBUTTONUP:
+            self.rectangle = False
+            self.rect_over = True
+            cv.rectangle(self.img, (self.ix, self.iy), (x, y), self.BLUE, 2)
+            self.rect = (min(self.ix, x), min(self.iy, y), abs(self.ix - x), abs(self.iy - y))
+            self.rect_or_mask = 0
+            print(" Now press the key 'n' a few times until no further change \n")
+
+        # draw touchup curves
+
+        if event == cv.EVENT_LBUTTONDOWN:
+            if self.rect_over == False:
+                print("first draw rectangle \n")
+            else:
+                self.drawing = True
+                cv.circle(self.img, (x,y), self.thickness, self.value['color'], -1)
+                cv.circle(self.mask, (x,y), self.thickness, self.value['val'], -1)
+
+        elif event == cv.EVENT_MOUSEMOVE:
+            if self.drawing == True:
+                cv.circle(self.img, (x, y), self.thickness, self.value['color'], -1)
+                cv.circle(self.mask, (x, y), self.thickness, self.value['val'], -1)
+
+        elif event == cv.EVENT_LBUTTONUP:
+            if self.drawing == True:
+                self.drawing = False
+                cv.circle(self.img, (x, y), self.thickness, self.value['color'], -1)
+                cv.circle(self.mask, (x, y), self.thickness, self.value['val'], -1)
+
+    def run(self):
+        # Loading images
+        if len(sys.argv) == 2:
+            filename = sys.argv[1] # for drawing purposes
         else:
-            drawing = True
-            cv.circle(img,(x,y),thickness,value['color'],-1)
-            cv.circle(mask,(x,y),thickness,value['val'],-1)
-
-    elif event == cv.EVENT_MOUSEMOVE:
-        if drawing == True:
-            cv.circle(img,(x,y),thickness,value['color'],-1)
-            cv.circle(mask,(x,y),thickness,value['val'],-1)
+            print("No input image given, so loading default image, lena.jpg \n")
+            print("Correct Usage: python grabcut.py <filename> \n")
+            filename = 'lena.jpg'
+
+        self.img = cv.imread(cv.samples.findFile(filename))
+        self.img2 = self.img.copy()                               # a copy of original image
+        self.mask = np.zeros(self.img.shape[:2], dtype = np.uint8) # mask initialized to PR_BG
+        self.output = np.zeros(self.img.shape, np.uint8)           # output image to be shown
+
+        # input and output windows
+        cv.namedWindow('output')
+        cv.namedWindow('input')
+        cv.setMouseCallback('input', self.onmouse)
+        cv.moveWindow('input', self.img.shape[1]+10,90)
+
+        print(" Instructions: \n")
+        print(" Draw a rectangle around the object using right mouse button \n")
+
+        while(1):
+
+            cv.imshow('output', self.output)
+            cv.imshow('input', self.img)
+            k = cv.waitKey(1)
+
+            # key bindings
+            if k == 27:         # esc to exit
+                break
+            elif k == ord('0'): # BG drawing
+                print(" mark background regions with left mouse button \n")
+                self.value = self.DRAW_BG
+            elif k == ord('1'): # FG drawing
+                print(" mark foreground regions with left mouse button \n")
+                self.value = self.DRAW_FG
+            elif k == ord('2'): # PR_BG drawing
+                self.value = self.DRAW_PR_BG
+            elif k == ord('3'): # PR_FG drawing
+                self.value = self.DRAW_PR_FG
+            elif k == ord('s'): # save image
+                bar = np.zeros((self.img.shape[0], 5, 3), np.uint8)
+                res = np.hstack((self.img2, bar, self.img, bar, self.output))
+                cv.imwrite('grabcut_output.png', res)
+                print(" Result saved as image \n")
+            elif k == ord('r'): # reset everything
+                print("resetting \n")
+                self.rect = (0,0,1,1)
+                self.drawing = False
+                self.rectangle = False
+                self.rect_or_mask = 100
+                self.rect_over = False
+                self.value = self.DRAW_FG
+                self.img = self.img2.copy()
+                self.mask = np.zeros(self.img.shape[:2], dtype = np.uint8) # mask initialized to PR_BG
+                self.output = np.zeros(self.img.shape, np.uint8)           # output image to be shown
+            elif k == ord('n'): # segment the image
+                print(""" For finer touchups, mark foreground and background after pressing keys 0-3
+                and again press 'n' \n""")
+                try:
+                    if (self.rect_or_mask == 0):         # grabcut with rect
+                        bgdmodel = np.zeros((1, 65), np.float64)
+                        fgdmodel = np.zeros((1, 65), np.float64)
+                        cv.grabCut(self.img2, self.mask, self.rect, bgdmodel, fgdmodel, 1, cv.GC_INIT_WITH_RECT)
+                        self.rect_or_mask = 1
+                    elif self.rect_or_mask == 1:         # grabcut with mask
+                        bgdmodel = np.zeros((1, 65), np.float64)
+                        fgdmodel = np.zeros((1, 65), np.float64)
+                        cv.grabCut(self.img2, self.mask, self.rect, bgdmodel, fgdmodel, 1, cv.GC_INIT_WITH_MASK)
+                except:
+                    import traceback
+                    traceback.print_exc()
+
+            mask2 = np.where((self.mask==1) + (self.mask==3), 255, 0).astype('uint8')
+            self.output = cv.bitwise_and(self.img2, self.img2, mask=mask2)
+
+        print('Done')
 
-    elif event == cv.EVENT_LBUTTONUP:
-        if drawing == True:
-            drawing = False
-            cv.circle(img,(x,y),thickness,value['color'],-1)
-            cv.circle(mask,(x,y),thickness,value['val'],-1)
 
 if __name__ == '__main__':
-
-    # print documentation
     print(__doc__)
-
-    # Loading images
-    if len(sys.argv) == 2:
-        filename = sys.argv[1] # for drawing purposes
-    else:
-        print("No input image given, so loading default image, lena.jpg \n")
-        print("Correct Usage: python grabcut.py <filename> \n")
-        filename = 'lena.jpg'
-
-    img = cv.imread(cv.samples.findFile(filename))
-    img2 = img.copy()                               # a copy of original image
-    mask = np.zeros(img.shape[:2],dtype = np.uint8) # mask initialized to PR_BG
-    output = np.zeros(img.shape,np.uint8)           # output image to be shown
-
-    # input and output windows
-    cv.namedWindow('output')
-    cv.namedWindow('input')
-    cv.setMouseCallback('input',onmouse)
-    cv.moveWindow('input',img.shape[1]+10,90)
-
-    print(" Instructions: \n")
-    print(" Draw a rectangle around the object using right mouse button \n")
-
-    while(1):
-
-        cv.imshow('output',output)
-        cv.imshow('input',img)
-        k = cv.waitKey(1)
-
-        # key bindings
-        if k == 27:         # esc to exit
-            break
-        elif k == ord('0'): # BG drawing
-            print(" mark background regions with left mouse button \n")
-            value = DRAW_BG
-        elif k == ord('1'): # FG drawing
-            print(" mark foreground regions with left mouse button \n")
-            value = DRAW_FG
-        elif k == ord('2'): # PR_BG drawing
-            value = DRAW_PR_BG
-        elif k == ord('3'): # PR_FG drawing
-            value = DRAW_PR_FG
-        elif k == ord('s'): # save image
-            bar = np.zeros((img.shape[0],5,3),np.uint8)
-            res = np.hstack((img2,bar,img,bar,output))
-            cv.imwrite('grabcut_output.png',res)
-            print(" Result saved as image \n")
-        elif k == ord('r'): # reset everything
-            print("resetting \n")
-            rect = (0,0,1,1)
-            drawing = False
-            rectangle = False
-            rect_or_mask = 100
-            rect_over = False
-            value = DRAW_FG
-            img = img2.copy()
-            mask = np.zeros(img.shape[:2],dtype = np.uint8) # mask initialized to PR_BG
-            output = np.zeros(img.shape,np.uint8)           # output image to be shown
-        elif k == ord('n'): # segment the image
-            print(""" For finer touchups, mark foreground and background after pressing keys 0-3
-            and again press 'n' \n""")
-            if (rect_or_mask == 0):         # grabcut with rect
-                bgdmodel = np.zeros((1,65),np.float64)
-                fgdmodel = np.zeros((1,65),np.float64)
-                cv.grabCut(img2,mask,rect,bgdmodel,fgdmodel,1,cv.GC_INIT_WITH_RECT)
-                rect_or_mask = 1
-            elif rect_or_mask == 1:         # grabcut with mask
-                bgdmodel = np.zeros((1,65),np.float64)
-                fgdmodel = np.zeros((1,65),np.float64)
-                cv.grabCut(img2,mask,rect,bgdmodel,fgdmodel,1,cv.GC_INIT_WITH_MASK)
-
-        mask2 = np.where((mask==1) + (mask==3),255,0).astype('uint8')
-        output = cv.bitwise_and(img2,img2,mask=mask2)
-
+    App().run()
     cv.destroyAllWindows()
index e085fdc..4e73f0b 100755 (executable)
@@ -18,8 +18,8 @@ Abid Rahman 3/14/12 debug Gary Bradski
 # Python 2/3 compatibility
 from __future__ import print_function
 
-import cv2 as cv
 import numpy as np
+import cv2 as cv
 
 bins = np.arange(256).reshape(256,1)
 
@@ -53,8 +53,7 @@ def hist_lines(im):
     return y
 
 
-if __name__ == '__main__':
-
+def main():
     import sys
 
     if len(sys.argv)>1:
@@ -116,4 +115,11 @@ if __name__ == '__main__':
             print('ESC')
             cv.destroyAllWindows()
             break
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index bf0aa43..b8d3a1a 100755 (executable)
@@ -11,13 +11,12 @@ Usage:
 # Python 2/3 compatibility
 from __future__ import print_function
 
-import cv2 as cv
 import numpy as np
-import sys
+import cv2 as cv
 
-if __name__ == '__main__':
-    print(__doc__)
+import sys
 
+def main():
     try:
         fn = sys.argv[1]
     except IndexError:
@@ -40,3 +39,10 @@ if __name__ == '__main__':
 
     cv.imshow("source", src)
     cv.waitKey(0)
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
+    cv.destroyAllWindows()
index e662854..7c99cf2 100755 (executable)
@@ -13,12 +13,11 @@ from __future__ import print_function
 
 import cv2 as cv
 import numpy as np
+
 import sys
 import math
 
-if __name__ == '__main__':
-    print(__doc__)
-
+def main():
     try:
         fn = sys.argv[1]
     except IndexError:
@@ -52,3 +51,10 @@ if __name__ == '__main__':
 
     cv.imshow("source", src)
     cv.waitKey(0)
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
+    cv.destroyAllWindows()
index 3e2fd56..53f8e98 100755 (executable)
@@ -20,17 +20,16 @@ from __future__ import print_function
 
 import numpy as np
 import cv2 as cv
+
 from common import Sketcher
 
-if __name__ == '__main__':
+def main():
     import sys
     try:
         fn = sys.argv[1]
     except:
         fn = 'fruits.jpg'
 
-    print(__doc__)
-
     img = cv.imread(cv.samples.findFile(fn))
     if img is None:
         print('Failed to load image file:', fn)
@@ -51,4 +50,11 @@ if __name__ == '__main__':
             img_mark[:] = img
             mark[:] = 0
             sketch.show()
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index 3028f54..654e3de 100755 (executable)
@@ -18,12 +18,13 @@ PY3 = sys.version_info[0] == 3
 if PY3:
     long = int
 
+import numpy as np
 import cv2 as cv
+
 from math import cos, sin, sqrt
 import numpy as np
 
-if __name__ == "__main__":
-
+def main():
     img_height = 500
     img_width = 500
     kalman = cv.KalmanFilter(2, 1, 0)
@@ -93,4 +94,10 @@ if __name__ == "__main__":
         if code in [27, ord('q'), ord('Q')]:
             break
 
-    cv.destroyWindow("Kalman")
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
+    cv.destroyAllWindows()
index 9c67b7a..d7fcbe8 100755 (executable)
@@ -18,12 +18,10 @@ import cv2 as cv
 
 from gaussian_mix import make_gaussians
 
-if __name__ == '__main__':
+def main():
     cluster_n = 5
     img_size = 512
 
-    print(__doc__)
-
     # generating bright palette
     colors = np.zeros((1, cluster_n, 3), np.uint8)
     colors[0,:] = 255
@@ -43,8 +41,15 @@ if __name__ == '__main__':
 
             cv.circle(img, (x, y), 1, c, -1)
 
-        cv.imshow('gaussian mixture', img)
+        cv.imshow('kmeans', img)
         ch = cv.waitKey(0)
         if ch == 27:
             break
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index 291251a..2ee73ec 100755 (executable)
@@ -22,6 +22,7 @@ if PY3:
 
 import numpy as np
 import cv2 as cv
+
 import video
 from common import nothing, getsize
 
@@ -44,9 +45,8 @@ def merge_lappyr(levels):
     return np.uint8(np.clip(img, 0, 255))
 
 
-if __name__ == '__main__':
+def main():
     import sys
-    print(__doc__)
 
     try:
         fn = sys.argv[1]
@@ -72,3 +72,11 @@ if __name__ == '__main__':
 
         if cv.waitKey(1) == 27:
             break
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
+    cv.destroyAllWindows()
index 67e4266..f646f17 100755 (executable)
@@ -145,12 +145,10 @@ class MLP(LetterStatModel):
 
 
 
-if __name__ == '__main__':
+def main():
     import getopt
     import sys
 
-    print(__doc__)
-
     models = [RTrees, KNearest, Boost, SVM, MLP] # NBayes
     models = dict( [(cls.__name__.lower(), cls) for cls in models] )
 
@@ -186,4 +184,11 @@ if __name__ == '__main__':
         fn = args['--save']
         print('saving model to %s ...' % fn)
         model.save(fn)
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index 0da4761..808f309 100755 (executable)
@@ -25,6 +25,7 @@ from __future__ import print_function
 
 import numpy as np
 import cv2 as cv
+
 import video
 from common import draw_str
 from video import presets
@@ -112,9 +113,11 @@ def main():
     except:
         video_src = 0
 
-    print(__doc__)
     App(video_src).run()
-    cv.destroyAllWindows()
+    print('Done')
+
 
 if __name__ == '__main__':
+    print(__doc__)
     main()
+    cv.destroyAllWindows()
index 19e819f..c668448 100755 (executable)
@@ -23,6 +23,7 @@ from __future__ import print_function
 
 import numpy as np
 import cv2 as cv
+
 import video
 from common import anorm2, draw_str
 from time import clock
@@ -96,9 +97,11 @@ def main():
     except:
         video_src = 0
 
-    print(__doc__)
     App(video_src).run()
-    cv.destroyAllWindows()
+    print('Done')
+
 
 if __name__ == '__main__':
+    print(__doc__)
     main()
+    cv.destroyAllWindows()
index 09b2cbc..0dc6b8b 100644 (file)
@@ -13,11 +13,10 @@ Keys:
 # Python 2/3 compatibility
 from __future__ import print_function
 
+import numpy as np
 import cv2 as cv
 
-if __name__ == '__main__':
-    print(__doc__)
-
+def main():
     import sys
     try:
         fn = sys.argv[1]
@@ -37,3 +36,10 @@ if __name__ == '__main__':
     cv.imshow('linearpolar', img3)
 
     cv.waitKey(0)
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
+    cv.destroyAllWindows()
index e368c28..9ecf5b0 100755 (executable)
@@ -21,9 +21,7 @@ import numpy as np
 import cv2 as cv
 
 
-if __name__ == '__main__':
-    print(__doc__)
-
+def main():
     import sys
     from itertools import cycle
     from common import draw_str
@@ -93,4 +91,11 @@ if __name__ == '__main__':
             else:
                 cur_str_mode = str_modes.next()
         update()
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index aebca3c..0bc2fce 100755 (executable)
@@ -25,59 +25,64 @@ import argparse
 from math import *
 
 
-drag_start = None
-sel = (0,0,0,0)
+class App():
+    drag_start = None
+    sel = (0,0,0,0)
 
-def onmouse(event, x, y, flags, param):
-    global drag_start, sel
-    if event == cv.EVENT_LBUTTONDOWN:
-        drag_start = x, y
-        sel = 0,0,0,0
-    elif event == cv.EVENT_LBUTTONUP:
-        if sel[2] > sel[0] and sel[3] > sel[1]:
-            patch = gray[sel[1]:sel[3],sel[0]:sel[2]]
-            result = cv.matchTemplate(gray,patch,cv.TM_CCOEFF_NORMED)
-            result = np.abs(result)**3
-            _val, result = cv.threshold(result, 0.01, 0, cv.THRESH_TOZERO)
-            result8 = cv.normalize(result,None,0,255,cv.NORM_MINMAX,cv.CV_8U)
-            cv.imshow("result", result8)
-        drag_start = None
-    elif drag_start:
-        #print flags
-        if flags & cv.EVENT_FLAG_LBUTTON:
-            minpos = min(drag_start[0], x), min(drag_start[1], y)
-            maxpos = max(drag_start[0], x), max(drag_start[1], y)
-            sel = minpos[0], minpos[1], maxpos[0], maxpos[1]
-            img = cv.cvtColor(gray, cv.COLOR_GRAY2BGR)
-            cv.rectangle(img, (sel[0], sel[1]), (sel[2], sel[3]), (0,255,255), 1)
-            cv.imshow("gray", img)
-        else:
-            print("selection is complete")
-            drag_start = None
+    def onmouse(self, event, x, y, flags, param):
+        if event == cv.EVENT_LBUTTONDOWN:
+            self.drag_start = x, y
+            self.sel = (0,0,0,0)
+        elif event == cv.EVENT_LBUTTONUP:
+            if self.sel[2] > self.sel[0] and self.sel[3] > self.sel[1]:
+                patch = self.gray[self.sel[1]:self.sel[3], self.sel[0]:self.sel[2]]
+                result = cv.matchTemplate(self.gray, patch, cv.TM_CCOEFF_NORMED)
+                result = np.abs(result)**3
+                _val, result = cv.threshold(result, 0.01, 0, cv.THRESH_TOZERO)
+                result8 = cv.normalize(result, None, 0, 255, cv.NORM_MINMAX, cv.CV_8U)
+                cv.imshow("result", result8)
+            self.drag_start = None
+        elif self.drag_start:
+            #print flags
+            if flags & cv.EVENT_FLAG_LBUTTON:
+                minpos = min(self.drag_start[0], x), min(self.drag_start[1], y)
+                maxpos = max(self.drag_start[0], x), max(self.drag_start[1], y)
+                self.sel = (minpos[0], minpos[1], maxpos[0], maxpos[1])
+                img = cv.cvtColor(self.gray, cv.COLOR_GRAY2BGR)
+                cv.rectangle(img, (self.sel[0], self.sel[1]), (self.sel[2], self.sel[3]), (0,255,255), 1)
+                cv.imshow("gray", img)
+            else:
+                print("selection is complete")
+                self.drag_start = None
 
-if __name__ == '__main__':
-    print(__doc__)
+    def run(self):
+        parser = argparse.ArgumentParser(description='Demonstrate mouse interaction with images')
+        parser.add_argument("-i","--input", default='../data/', help="Input directory.")
+        args = parser.parse_args()
+        path = args.input
+
+        cv.namedWindow("gray",1)
+        cv.setMouseCallback("gray", self.onmouse)
+        '''Loop through all the images in the directory'''
+        for infile in glob.glob( os.path.join(path, '*.*') ):
+            ext = os.path.splitext(infile)[1][1:] #get the filename extension
+            if ext == "png" or ext == "jpg" or ext == "bmp" or ext == "tiff" or ext == "pbm":
+                print(infile)
 
-    parser = argparse.ArgumentParser(description='Demonstrate mouse interaction with images')
-    parser.add_argument("-i","--input", default='../data/', help="Input directory.")
-    args = parser.parse_args()
-    path = args.input
+                img = cv.imread(infile,1)
+                if img is None:
+                    continue
+                self.sel = (0,0,0,0)
+                self.drag_start = None
+                self.gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
+                cv.imshow("gray", self.gray)
+                if cv.waitKey() == 27:
+                    break
 
-    cv.namedWindow("gray",1)
-    cv.setMouseCallback("gray", onmouse)
-    '''Loop through all the images in the directory'''
-    for infile in glob.glob( os.path.join(path, '*.*') ):
-        ext = os.path.splitext(infile)[1][1:] #get the filename extension
-        if ext == "png" or ext == "jpg" or ext == "bmp" or ext == "tiff" or ext == "pbm":
-            print(infile)
+        print('Done')
 
-            img=cv.imread(infile,1)
-            if img is None:
-                continue
-            sel = (0,0,0,0)
-            drag_start = None
-            gray=cv.cvtColor(img, cv.COLOR_BGR2GRAY)
-            cv.imshow("gray",gray)
-            if cv.waitKey() == 27:
-                break
+
+if __name__ == '__main__':
+    print(__doc__)
+    App().run()
     cv.destroyAllWindows()
index bf984d0..929a313 100755 (executable)
@@ -14,12 +14,16 @@ Keys:
 
 '''
 
+# Python 2/3 compatibility
+from __future__ import print_function
+
 import numpy as np
 import cv2 as cv
+
 import video
 import sys
 
-if __name__ == '__main__':
+def main():
     try:
         video_src = sys.argv[1]
     except:
@@ -42,4 +46,11 @@ if __name__ == '__main__':
         cv.imshow('img', vis)
         if cv.waitKey(5) == 27:
             break
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index 3e503a4..0763f79 100644 (file)
@@ -13,11 +13,11 @@ Usage:
 # Python 2/3 compatibility
 from __future__ import print_function
 
+import numpy as np
 import cv2 as cv
 
-if __name__ == '__main__':
+def main():
     import sys
-    print(__doc__)
 
     try:
         param = sys.argv[1]
@@ -31,3 +31,11 @@ if __name__ == '__main__':
         print("\t--help\n\t\tprint this help")
     else:
         print("Welcome to OpenCV")
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
+    cv.destroyAllWindows()
index c43c726..c451558 100755 (executable)
@@ -18,6 +18,7 @@ from __future__ import print_function
 
 import numpy as np
 import cv2 as cv
+
 import video
 
 
@@ -55,9 +56,8 @@ def warp_flow(img, flow):
     res = cv.remap(img, flow, None, cv.INTER_LINEAR)
     return res
 
-if __name__ == '__main__':
+def main():
     import sys
-    print(__doc__)
     try:
         fn = sys.argv[1]
     except IndexError:
@@ -94,4 +94,11 @@ if __name__ == '__main__':
             if show_glitch:
                 cur_glitch = img.copy()
             print('glitch is', ['off', 'on'][show_glitch])
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index a6f0538..d2a7fde 100755 (executable)
@@ -30,13 +30,11 @@ def draw_detections(img, rects, thickness = 1):
         cv.rectangle(img, (x+pad_w, y+pad_h), (x+w-pad_w, y+h-pad_h), (0, 255, 0), thickness)
 
 
-if __name__ == '__main__':
+def main():
     import sys
     from glob import glob
     import itertools as it
 
-    print(__doc__)
-
     hog = cv.HOGDescriptor()
     hog.setSVMDetector( cv.HOGDescriptor_getDefaultPeopleDetector() )
 
@@ -68,4 +66,11 @@ if __name__ == '__main__':
         ch = cv.waitKey()
         if ch == 27:
             break
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index 90e8af3..1e7ffb8 100755 (executable)
@@ -7,6 +7,7 @@ Loads several images sequentially and tries to find squares in each image.
 '''
 
 # Python 2/3 compatibility
+from __future__ import print_function
 import sys
 PY3 = sys.version_info[0] == 3
 
@@ -42,7 +43,7 @@ def find_squares(img):
                         squares.append(cnt)
     return squares
 
-if __name__ == '__main__':
+def main():
     from glob import glob
     for fn in glob('../data/pic*.png'):
         img = cv.imread(fn)
@@ -52,4 +53,11 @@ if __name__ == '__main__':
         ch = cv.waitKey()
         if ch == 27:
             break
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index 2d53931..969ea11 100755 (executable)
@@ -33,7 +33,7 @@ def write_ply(fn, verts, colors):
         np.savetxt(f, verts, fmt='%f %f %f %d %d %d ')
 
 
-if __name__ == '__main__':
+def main():
     print('loading images...')
     imgL = cv.pyrDown(cv.imread(cv.samples.findFile('aloeL.jpg')))  # downscale images for faster processing
     imgR = cv.pyrDown(cv.imread(cv.samples.findFile('aloeR.jpg')))
@@ -75,4 +75,11 @@ if __name__ == '__main__':
     cv.imshow('left', imgL)
     cv.imshow('disparity', (disp-min_disp)/num_disp)
     cv.waitKey()
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index 70259a8..3311085 100755 (executable)
@@ -16,7 +16,7 @@ from __future__ import print_function
 import numpy as np
 import cv2 as cv
 
-if __name__ == '__main__':
+def main():
     import sys
     try:
         fn = sys.argv[1]
@@ -45,3 +45,11 @@ if __name__ == '__main__':
     cv.imshow('input', img)
     cv.imshow('flow', vis)
     cv.waitKey()
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
+    cv.destroyAllWindows()
index 33cbd0d..9d09ea7 100644 (file)
@@ -5,9 +5,10 @@
 from __future__ import print_function
 
 import numpy as np
+import cv2 as cv
+
 from numpy import pi, sin, cos
 
-import cv2 as cv
 
 defaultSize = 512
 
@@ -86,7 +87,7 @@ class TestSceneRender():
         else:
             self.currentRect = self.initialRect + np.int( 30*cos(self.time*self.speed) + 50*sin(self.time*self.speed))
             if self.deformation:
-                self.currentRect[1:3] += self.h/20*cos(self.time)
+                self.currentRect[1:3] += int(self.h/20*cos(self.time))
             cv.fillConvexPoly(img, self.currentRect, (0, 0, 255))
 
         self.time += self.timeStep
@@ -96,8 +97,7 @@ class TestSceneRender():
         self.time = 0.0
 
 
-if __name__ == '__main__':
-
+def main():
     backGr = cv.imread(cv.samples.findFile('graf1.png'))
     fgr = cv.imread(cv.samples.findFile('box.png'))
 
@@ -111,6 +111,11 @@ if __name__ == '__main__':
         ch = cv.waitKey(3)
         if  ch == 27:
             break
-    #import os
-    #print (os.environ['PYTHONPATH'])
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index 0d80cba..27dbe02 100755 (executable)
@@ -27,7 +27,7 @@ USAGE: turing.py [-o <output.avi>]
 Press ESC to stop.
 '''
 
-if __name__ == '__main__':
+def main():
     print(help_message)
 
     w, h = 512, 512
@@ -71,4 +71,11 @@ if __name__ == '__main__':
         cv.imshow('a', vis)
         if cv.waitKey(5) == 27:
             break
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
     cv.destroyAllWindows()
index 50ba474..684702a 100755 (executable)
@@ -32,13 +32,13 @@ Keys:
 # Python 2/3 compatibility
 from __future__ import print_function
 
+import numpy as np
+import cv2 as cv
+
 import re
 
-import numpy as np
 from numpy import pi, sin, cos
 
-import cv2 as cv
-
 # built-in modules
 from time import clock
 
index c95a5ba..4886db3 100755 (executable)
@@ -36,11 +36,9 @@ class DummyTask:
     def get(self):
         return self.data
 
-if __name__ == '__main__':
+def main():
     import sys
 
-    print(__doc__)
-
     try:
         fn = sys.argv[1]
     except:
@@ -86,4 +84,11 @@ if __name__ == '__main__':
             threaded_mode = not threaded_mode
         if ch == 27:
             break
-cv.destroyAllWindows()
+
+    print('Done')
+
+
+if __name__ == '__main__':
+    print(__doc__)
+    main()
+    cv.destroyAllWindows()
index d506833..68f2269 100644 (file)
@@ -17,51 +17,62 @@ Keys:
 # Python 2/3 compatibility
 from __future__ import print_function
 
+import numpy as np
 import cv2 as cv
 
-def decode_fourcc(v):
-    v = int(v)
-    return "".join([chr((v >> 8 * i) & 0xFF) for i in range(4)])
+def main():
 
-font = cv.FONT_HERSHEY_SIMPLEX
-color = (0, 255, 0)
+    def decode_fourcc(v):
+        v = int(v)
+        return "".join([chr((v >> 8 * i) & 0xFF) for i in range(4)])
 
-cap = cv.VideoCapture(0)
-cap.set(cv.CAP_PROP_AUTOFOCUS, False)  # Known bug: https://github.com/opencv/opencv/pull/5474
+    font = cv.FONT_HERSHEY_SIMPLEX
+    color = (0, 255, 0)
 
-cv.namedWindow("Video")
+    cap = cv.VideoCapture(0)
+    cap.set(cv.CAP_PROP_AUTOFOCUS, False)  # Known bug: https://github.com/opencv/opencv/pull/5474
 
-convert_rgb = True
-fps = int(cap.get(cv.CAP_PROP_FPS))
-focus = int(min(cap.get(cv.CAP_PROP_FOCUS) * 100, 2**31-1))  # ceil focus to C_LONG as Python3 int can go to +inf
+    cv.namedWindow("Video")
 
-cv.createTrackbar("FPS", "Video", fps, 30, lambda v: cap.set(cv.CAP_PROP_FPS, v))
-cv.createTrackbar("Focus", "Video", focus, 100, lambda v: cap.set(cv.CAP_PROP_FOCUS, v / 100))
+    convert_rgb = True
+    fps = int(cap.get(cv.CAP_PROP_FPS))
+    focus = int(min(cap.get(cv.CAP_PROP_FOCUS) * 100, 2**31-1))  # ceil focus to C_LONG as Python3 int can go to +inf
 
-while True:
-    status, img = cap.read()
+    cv.createTrackbar("FPS", "Video", fps, 30, lambda v: cap.set(cv.CAP_PROP_FPS, v))
+    cv.createTrackbar("Focus", "Video", focus, 100, lambda v: cap.set(cv.CAP_PROP_FOCUS, v / 100))
 
-    fourcc = decode_fourcc(cap.get(cv.CAP_PROP_FOURCC))
+    while True:
+        status, img = cap.read()
 
-    fps = cap.get(cv.CAP_PROP_FPS)
+        fourcc = decode_fourcc(cap.get(cv.CAP_PROP_FOURCC))
 
-    if not bool(cap.get(cv.CAP_PROP_CONVERT_RGB)):
-        if fourcc == "MJPG":
-            img = cv.imdecode(img, cv.IMREAD_GRAYSCALE)
-        elif fourcc == "YUYV":
-            img = cv.cvtColor(img, cv.COLOR_YUV2GRAY_YUYV)
-        else:
-            print("unsupported format")
+        fps = cap.get(cv.CAP_PROP_FPS)
+
+        if not bool(cap.get(cv.CAP_PROP_CONVERT_RGB)):
+            if fourcc == "MJPG":
+                img = cv.imdecode(img, cv.IMREAD_GRAYSCALE)
+            elif fourcc == "YUYV":
+                img = cv.cvtColor(img, cv.COLOR_YUV2GRAY_YUYV)
+            else:
+                print("unsupported format")
+                break
+
+        cv.putText(img, "Mode: {}".format(fourcc), (15, 40), font, 1.0, color)
+        cv.putText(img, "FPS: {}".format(fps), (15, 80), font, 1.0, color)
+        cv.imshow("Video", img)
+
+        k = cv.waitKey(1)
+
+        if k == 27:
             break
+        elif k == ord('g'):
+            convert_rgb = not convert_rgb
+            cap.set(cv.CAP_PROP_CONVERT_RGB, convert_rgb)
 
-    cv.putText(img, "Mode: {}".format(fourcc), (15, 40), font, 1.0, color)
-    cv.putText(img, "FPS: {}".format(fps), (15, 80), font, 1.0, color)
-    cv.imshow("Video", img)
+    print('Done')
 
-    k = cv.waitKey(1)
 
-    if k == 27:
-        break
-    elif k == ord('g'):
-        convert_rgb = not convert_rgb
-        cap.set(cv.CAP_PROP_CONVERT_RGB, convert_rgb)
+if __name__ == '__main__':
+    print(__doc__)
+    main()
+    cv.destroyAllWindows()
index b2bfbdd..7c71c81 100755 (executable)
@@ -76,10 +76,10 @@ class App:
 
 
 if __name__ == '__main__':
+    print(__doc__)
     import sys
     try:
         fn = sys.argv[1]
     except:
         fn = 'fruits.jpg'
-    print(__doc__)
     App(cv.samples.findFile(fn)).run()