Blame view

3rdparty/opencv-4.5.4/samples/python/kmeans.py 1.21 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
  #!/usr/bin/env python
  
  '''
  K-means clusterization sample.
  Usage:
     kmeans.py
  
  Keyboard shortcuts:
     ESC   - exit
     space - generate new distribution
  '''
  
  # Python 2/3 compatibility
  from __future__ import print_function
  
  import numpy as np
  import cv2 as cv
  
  from gaussian_mix import make_gaussians
  
  def main():
      cluster_n = 5
      img_size = 512
  
      # generating bright palette
      colors = np.zeros((1, cluster_n, 3), np.uint8)
      colors[0,:] = 255
      colors[0,:,0] = np.arange(0, 180, 180.0/cluster_n)
      colors = cv.cvtColor(colors, cv.COLOR_HSV2BGR)[0]
  
      while True:
          print('sampling distributions...')
          points, _ = make_gaussians(cluster_n, img_size)
  
          term_crit = (cv.TERM_CRITERIA_EPS, 30, 0.1)
          _ret, labels, _centers = cv.kmeans(points, cluster_n, None, term_crit, 10, 0)
  
          img = np.zeros((img_size, img_size, 3), np.uint8)
          for (x, y), label in zip(np.int32(points), labels.ravel()):
              c = list(map(int, colors[label]))
  
              cv.circle(img, (x, y), 1, c, -1)
  
          cv.imshow('kmeans', img)
          ch = cv.waitKey(0)
          if ch == 27:
              break
  
      print('Done')
  
  
  if __name__ == '__main__':
      print(__doc__)
      main()
      cv.destroyAllWindows()