lappyr.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #!/usr/bin/env python
  2. ''' An example of Laplacian Pyramid construction and merging.
  3. Level : Intermediate
  4. Usage : python lappyr.py [<video source>]
  5. References:
  6. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.54.299
  7. Alexander Mordvintsev 6/10/12
  8. '''
  9. # Python 2/3 compatibility
  10. from __future__ import print_function
  11. import sys
  12. PY3 = sys.version_info[0] == 3
  13. if PY3:
  14. xrange = range
  15. import numpy as np
  16. import cv2
  17. import video
  18. from common import nothing, getsize
  19. def build_lappyr(img, leveln=6, dtype=np.int16):
  20. img = dtype(img)
  21. levels = []
  22. for i in xrange(leveln-1):
  23. next_img = cv2.pyrDown(img)
  24. img1 = cv2.pyrUp(next_img, dstsize=getsize(img))
  25. levels.append(img-img1)
  26. img = next_img
  27. levels.append(img)
  28. return levels
  29. def merge_lappyr(levels):
  30. img = levels[-1]
  31. for lev_img in levels[-2::-1]:
  32. img = cv2.pyrUp(img, dstsize=getsize(lev_img))
  33. img += lev_img
  34. return np.uint8(np.clip(img, 0, 255))
  35. if __name__ == '__main__':
  36. import sys
  37. print(__doc__)
  38. try:
  39. fn = sys.argv[1]
  40. except:
  41. fn = 0
  42. cap = video.create_capture(fn)
  43. leveln = 6
  44. cv2.namedWindow('level control')
  45. for i in xrange(leveln):
  46. cv2.createTrackbar('%d'%i, 'level control', 5, 50, nothing)
  47. while True:
  48. ret, frame = cap.read()
  49. pyr = build_lappyr(frame, leveln)
  50. for i in xrange(leveln):
  51. v = int(cv2.getTrackbarPos('%d'%i, 'level control') / 5)
  52. pyr[i] *= v
  53. res = merge_lappyr(pyr)
  54. cv2.imshow('laplacian pyramid filter', res)
  55. if cv2.waitKey(1) & 0xFF == 27:
  56. break