1793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#!/usr/bin/env python
2793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
3793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler'''
4793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerMSER detector demo
5793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler==================
6793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
7793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerUsage:
8793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler------
9793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    mser.py [<video source>]
10793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
11793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerKeys:
12793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler-----
13793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    ESC   - exit
14793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
15793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler'''
16793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
17793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport numpy as np
18793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport cv2
19793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport video
20793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
21793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerif __name__ == '__main__':
22793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    import sys
23793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    try:
24793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        video_src = sys.argv[1]
25793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    except:
26793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        video_src = 0
27793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
28793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    cam = video.create_capture(video_src)
29793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    mser = cv2.MSER_create()
30793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    while True:
31793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        ret, img = cam.read()
32793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
33793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        vis = img.copy()
34793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
35793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        regions = mser.detectRegions(gray, None)
36793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        hulls = [cv2.convexHull(p.reshape(-1, 1, 2)) for p in regions]
37793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        cv2.polylines(vis, hulls, 1, (0, 255, 0))
38793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
39793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        cv2.imshow('img', vis)
40793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        if 0xFF & cv2.waitKey(5) == 27:
41793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            break
42793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    cv2.destroyAllWindows()
43