1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #!/usr/bin/env python
- ''' An example of Laplacian Pyramid construction and merging.
- Level : Intermediate
- Usage : python lappyr.py [<video source>]
- References:
- http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.54.299
- Alexander Mordvintsev 6/10/12
- '''
- # Python 2/3 compatibility
- from __future__ import print_function
- import sys
- PY3 = sys.version_info[0] == 3
- if PY3:
- xrange = range
- import numpy as np
- import cv2
- import video
- from common import nothing, getsize
- def build_lappyr(img, leveln=6, dtype=np.int16):
- img = dtype(img)
- levels = []
- for i in xrange(leveln-1):
- next_img = cv2.pyrDown(img)
- img1 = cv2.pyrUp(next_img, dstsize=getsize(img))
- levels.append(img-img1)
- img = next_img
- levels.append(img)
- return levels
- def merge_lappyr(levels):
- img = levels[-1]
- for lev_img in levels[-2::-1]:
- img = cv2.pyrUp(img, dstsize=getsize(lev_img))
- img += lev_img
- return np.uint8(np.clip(img, 0, 255))
- if __name__ == '__main__':
- import sys
- print(__doc__)
- try:
- fn = sys.argv[1]
- except:
- fn = 0
- cap = video.create_capture(fn)
- leveln = 6
- cv2.namedWindow('level control')
- for i in xrange(leveln):
- cv2.createTrackbar('%d'%i, 'level control', 5, 50, nothing)
- while True:
- ret, frame = cap.read()
- pyr = build_lappyr(frame, leveln)
- for i in xrange(leveln):
- v = int(cv2.getTrackbarPos('%d'%i, 'level control') / 5)
- pyr[i] *= v
- res = merge_lappyr(pyr)
- cv2.imshow('laplacian pyramid filter', res)
- if cv2.waitKey(1) & 0xFF == 27:
- break
|