mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
1.6 KiB
78 lines
1.6 KiB
#!/usr/bin/env python |
|
|
|
''' |
|
Distance transform sample. |
|
|
|
Usage: |
|
distrans.py [<image>] |
|
|
|
Keys: |
|
ESC - exit |
|
v - toggle voronoi mode |
|
''' |
|
|
|
# Python 2/3 compatibility |
|
from __future__ import print_function |
|
|
|
import numpy as np |
|
import cv2 as cv |
|
|
|
from common import make_cmap |
|
|
|
def main(): |
|
import sys |
|
try: |
|
fn = sys.argv[1] |
|
except: |
|
fn = 'fruits.jpg' |
|
|
|
fn = cv.samples.findFile(fn) |
|
img = cv.imread(fn, cv.IMREAD_GRAYSCALE) |
|
if img is None: |
|
print('Failed to load fn:', fn) |
|
sys.exit(1) |
|
|
|
cm = make_cmap('jet') |
|
need_update = True |
|
voronoi = False |
|
|
|
def update(dummy=None): |
|
global need_update |
|
need_update = False |
|
thrs = cv.getTrackbarPos('threshold', 'distrans') |
|
mark = cv.Canny(img, thrs, 3*thrs) |
|
dist, labels = cv.distanceTransformWithLabels(~mark, cv.DIST_L2, 5) |
|
if voronoi: |
|
vis = cm[np.uint8(labels)] |
|
else: |
|
vis = cm[np.uint8(dist*2)] |
|
vis[mark != 0] = 255 |
|
cv.imshow('distrans', vis) |
|
|
|
def invalidate(dummy=None): |
|
global need_update |
|
need_update = True |
|
|
|
cv.namedWindow('distrans') |
|
cv.createTrackbar('threshold', 'distrans', 60, 255, invalidate) |
|
update() |
|
|
|
|
|
while True: |
|
ch = cv.waitKey(50) |
|
if ch == 27: |
|
break |
|
if ch == ord('v'): |
|
voronoi = not voronoi |
|
print('showing', ['distance', 'voronoi'][voronoi]) |
|
update() |
|
if need_update: |
|
update() |
|
|
|
print('Done') |
|
|
|
|
|
if __name__ == '__main__': |
|
print(__doc__) |
|
main() |
|
cv.destroyAllWindows()
|
|
|