Blame view

3rdparty/opencv-4.5.4/samples/python/lappyr.py 1.69 KB
f4334277   Hu Chunming   提交3rdparty
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
  #!/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 as cv
  
  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 = cv.pyrDown(img)
          img1 = cv.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 = cv.pyrUp(img, dstsize=getsize(lev_img))
          img += lev_img
      return np.uint8(np.clip(img, 0, 255))
  
  
  def main():
      import sys
  
      try:
          fn = sys.argv[1]
      except:
          fn = 0
      cap = video.create_capture(fn)
  
      leveln = 6
      cv.namedWindow('level control')
      for i in xrange(leveln):
          cv.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(cv.getTrackbarPos('%d'%i, 'level control') / 5)
              pyr[i] *= v
          res = merge_lappyr(pyr)
  
          cv.imshow('laplacian pyramid filter', res)
  
          if cv.waitKey(1) == 27:
              break
  
      print('Done')
  
  
  if __name__ == '__main__':
      print(__doc__)
      main()
      cv.destroyAllWindows()