diff --git a/samples/python2/contours.py b/samples/python2/contours.py new file mode 100644 index 0000000000..b546e58650 --- /dev/null +++ b/samples/python2/contours.py @@ -0,0 +1,48 @@ +import numpy as np +import cv2 + +def make_image(): + img = np.zeros((500, 500), np.uint8) + black, white = 0, 255 + for i in xrange(6): + dx = (i%2)*250 - 30 + dy = (i/2)*150 + + if i == 0: + for j in xrange(11): + angle = (j+5)*np.pi/21 + c, s = np.cos(angle), np.sin(angle) + x1, y1 = np.int32([dx+100+j*10-80*c, dy+100-90*s]) + x2, y2 = np.int32([dx+100+j*10-30*c, dy+100-30*s]) + cv2.line(img, (x1, y1), (x2, y2), white) + + cv2.ellipse( img, (dx+150, dy+100), (100,70), 0, 0, 360, white, -1 ) + cv2.ellipse( img, (dx+115, dy+70), (30,20), 0, 0, 360, black, -1 ) + cv2.ellipse( img, (dx+185, dy+70), (30,20), 0, 0, 360, black, -1 ) + cv2.ellipse( img, (dx+115, dy+70), (15,15), 0, 0, 360, white, -1 ) + cv2.ellipse( img, (dx+185, dy+70), (15,15), 0, 0, 360, white, -1 ) + cv2.ellipse( img, (dx+115, dy+70), (5,5), 0, 0, 360, black, -1 ) + cv2.ellipse( img, (dx+185, dy+70), (5,5), 0, 0, 360, black, -1 ) + cv2.ellipse( img, (dx+150, dy+100), (10,5), 0, 0, 360, black, -1 ) + cv2.ellipse( img, (dx+150, dy+150), (40,10), 0, 0, 360, black, -1 ) + cv2.ellipse( img, (dx+27, dy+100), (20,35), 0, 0, 360, white, -1 ) + cv2.ellipse( img, (dx+273, dy+100), (20,35), 0, 0, 360, white, -1 ) + return img + +if __name__ == '__main__': + img = make_image() + h, w = img.shape[:2] + + contours0, hierarchy = cv2.findContours( img.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) + contours = [cv2.approxPolyDP(cnt, 3, True) for cnt in contours0] + + def update(levels): + vis = np.zeros((h, w, 3), np.uint8) + levels = levels - 3 + cv2.drawContours( vis, contours, (-1, 3)[levels <= 0], (128,255,255), + 3, cv2.CV_AA, hierarchy, abs(levels) ) + cv2.imshow('contours', vis) + update(3) + cv2.createTrackbar( "levels+3", "contours", 3, 7, update ) + cv2.imshow('image', img) + cv2.waitKey() \ No newline at end of file