From 724cc5b481850600268f22622e96fecd18c96ae5 Mon Sep 17 00:00:00 2001 From: Alexander Mordvintsev Date: Sat, 2 Jul 2011 16:03:17 +0000 Subject: [PATCH] floodfill.py sample added --- samples/python2/floodfill.py | 64 ++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 samples/python2/floodfill.py diff --git a/samples/python2/floodfill.py b/samples/python2/floodfill.py new file mode 100644 index 000000000..c9d31286e --- /dev/null +++ b/samples/python2/floodfill.py @@ -0,0 +1,64 @@ +import numpy as np +import cv2, cv + +help_message = '''USAGE: floodfill.py [] + +Click on the image to set seed point + +Keys: + f - toggle floating range + c - toggle 4/8 connectivity + ESC - exit +''' + +if __name__ == '__main__': + import sys + try: fn = sys.argv[1] + except: fn = '../cpp/fruits.jpg' + print help_message + + img = cv2.imread(fn, True) + 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: + cv2.imshow('floodfill', img) + return + flooded = img.copy() + mask[:] = 0 + lo = cv2.getTrackbarPos('lo', 'floodfill') + hi = cv2.getTrackbarPos('hi', 'floodfill') + flags = connectivity + if fixed_range: + flags |= cv2.FLOODFILL_FIXED_RANGE + cv2.floodFill(flooded, mask, seed_pt, (255, 255, 255), (lo,)*3, (hi,)*3, flags) + cv2.circle(flooded, seed_pt, 2, (0, 0, 255), -1) + cv2.imshow('floodfill', flooded) + + def onmouse(event, x, y, flags, param): + global seed_pt + if flags & cv.CV_EVENT_FLAG_LBUTTON: + seed_pt = x, y + update() + + update() + cv2.setMouseCallback('floodfill', onmouse) + cv2.createTrackbar('lo', 'floodfill', 20, 255, update) + cv2.createTrackbar('hi', 'floodfill', 20, 255, update) + + while True: + ch = cv2.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()