1793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#!/usr/bin/env python 2793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 3793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler''' An example of Laplacian Pyramid construction and merging. 4793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 5793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerLevel : Intermediate 6793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 7793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerUsage : python lappyr.py [<video source>] 8793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 9793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerReferences: 10793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.54.299 11793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 12793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerAlexander Mordvintsev 6/10/12 13793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler''' 14793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 15793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport numpy as np 16793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport cv2 17793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport video 18793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerfrom common import nothing, getsize 19793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 20793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerdef build_lappyr(img, leveln=6, dtype=np.int16): 21793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler img = dtype(img) 22793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler levels = [] 23793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler for i in xrange(leveln-1): 24793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler next_img = cv2.pyrDown(img) 25793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler img1 = cv2.pyrUp(next_img, dstsize=getsize(img)) 26793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler levels.append(img-img1) 27793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler img = next_img 28793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler levels.append(img) 29793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return levels 30793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 31793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerdef merge_lappyr(levels): 32793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler img = levels[-1] 33793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler for lev_img in levels[-2::-1]: 34793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler img = cv2.pyrUp(img, dstsize=getsize(lev_img)) 35793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler img += lev_img 36793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return np.uint8(np.clip(img, 0, 255)) 37793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 38793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 39793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerif __name__ == '__main__': 40793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler import sys 41793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler print __doc__ 42793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 43793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler try: 44793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler fn = sys.argv[1] 45793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler except: 46793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler fn = 0 47793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler cap = video.create_capture(fn) 48793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 49793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler leveln = 6 50793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler cv2.namedWindow('level control') 51793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler for i in xrange(leveln): 52793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler cv2.createTrackbar('%d'%i, 'level control', 5, 50, nothing) 53793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 54793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler while True: 55793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler ret, frame = cap.read() 56793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 57793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler pyr = build_lappyr(frame, leveln) 58793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler for i in xrange(leveln): 59793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler v = cv2.getTrackbarPos('%d'%i, 'level control') / 5 60793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler pyr[i] *= v 61793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler res = merge_lappyr(pyr) 62793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 63793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler cv2.imshow('laplacian pyramid filter', res) 64793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 65793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if cv2.waitKey(1) & 0xFF == 27: 66793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler break 67