19
19
20
20
if __name__ == '__main__' :
21
21
22
- # 构建 HSV颜色地图
23
22
hsv_map = np .zeros ((180 , 256 , 3 ), np .uint8 )
24
- # np.indices 可以 回由数组索引构建的新数组。 例如 np.indices 3,2 其中 3,2 为原来数组的维度 和列。 回值 先看 入的参数有几维 3,2 有 2 维 所以从 出的结果应 是 [[a],[b]], 其中包含两个 3 2 列数组。 第二看每一维的大小 第一维为 3, 所以 a 中的值就 0 到 2 最大索引数 a 中的每一个值就是它的 索引 同样的方法得到 b 列索引
25
- # 结果就是
26
- # array([[[0, 0],
27
- # [1, 1],
28
- # [2, 2]],
29
- # [[0, 1],
30
- # [0, 1],
31
- # [0, 1]]])
32
23
h , s = np .indices (hsv_map .shape [:2 ])
33
- hsv_map [:, :, 0 ] = h
34
- hsv_map [:, :, 1 ] = s
35
- hsv_map [:, :, 2 ] = 255
24
+ hsv_map [:,:, 0 ] = h
25
+ hsv_map [:,:, 1 ] = s
26
+ hsv_map [:,:, 2 ] = 255
36
27
hsv_map = cv2 .cvtColor (hsv_map , cv2 .COLOR_HSV2BGR )
37
28
cv2 .imshow ('hsv_map' , hsv_map )
38
29
39
30
cv2 .namedWindow ('hist' , 0 )
40
31
hist_scale = 10
41
32
42
-
43
33
def set_scale (val ):
44
34
global hist_scale
45
35
hist_scale = val
46
-
47
-
48
36
cv2 .createTrackbar ('scale' , 'hist' , hist_scale , 32 , set_scale )
49
37
50
38
try :
@@ -56,21 +44,19 @@ def set_scale(val):
56
44
while True :
57
45
flag , frame = cam .read ()
58
46
cv2 .imshow ('camera' , frame )
59
- # 图像 字塔
60
- # 图像 字塔 低分 率 但不会对直方图有太大影响。
61
- # 但 种低分 率 可以很好抑制噪声 从而去 孤立的小点对直方图的影响
47
+
62
48
small = cv2 .pyrDown (frame )
63
49
64
50
hsv = cv2 .cvtColor (small , cv2 .COLOR_BGR2HSV )
65
- dark = hsv [...,2 ] < 32
51
+ dark = hsv [...,2 ] < 32
66
52
hsv [dark ] = 0
67
53
h = cv2 .calcHist ([hsv ], [0 , 1 ], None , [180 , 256 ], [0 , 180 , 0 , 256 ])
68
54
69
- h = np .clip (h * 0.005 * hist_scale , 0 , 1 )
70
- vis = hsv_map * h [:, :, np .newaxis ] / 255.0
55
+ h = np .clip (h * 0.005 * hist_scale , 0 , 1 )
56
+ vis = hsv_map * h [:,:, np .newaxis ] / 255.0
71
57
cv2 .imshow ('hist' , vis )
72
58
73
59
ch = cv2 .waitKey (1 )
74
- if ch == ord ( 'q' ) :
60
+ if ch == 27 :
75
61
break
76
62
cv2 .destroyAllWindows ()
0 commit comments