parent
1c96aac52e
commit
724cc5b481
1 changed files with 64 additions and 0 deletions
@ -0,0 +1,64 @@ |
|||||||
|
import numpy as np |
||||||
|
import cv2, cv |
||||||
|
|
||||||
|
help_message = '''USAGE: floodfill.py [<image>] |
||||||
|
|
||||||
|
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() |
Loading…
Reference in new issue