有人能解释颜色直方图的代码吗



我已经复制了颜色直方图的代码,但我不了解范围0,15和值17的用法。有人能解释我吗?

这里的代码:

# Colour Histogram
Blue = cv2.calcHist([img], [0], None, [256], [0,256])
Green = cv2.calcHist([img], [1], None, [256], [0,256])
Red = cv2.calcHist([img], [2], None, [256], [0,256])
result_R = [i for i in range(0,15)]
result_G = [i for i in range(0,15)]
result_B = [i for i in range(0,15)]
start = 0
end = 17
for i in range(0,15):
r = np.sum(Red[start:end])
g = np.sum(Green[start:end])
b = np.sum(Blue[start:end])
start = end
end = end + 17
result_R[i] = r
result_G[i] = g
result_B[i] = b

我首先注意到的是,result_R(以及gb(正在初始化为列表,但在循环中,它正在分配列表的一个元素,因此初始值将被覆盖。

因此,从空列表和.append开始同样有效,每个循环都有新值,所以让我们从那里开始:

# Colour Histogram
Blue = cv2.calcHist([img], [0], None, [256], [0,256])
Green = cv2.calcHist([img], [1], None, [256], [0,256])
Red = cv2.calcHist([img], [2], None, [256], [0,256])
result_R = [] # edited
result_G = [] # edited
result_B = [] # edited
start = 0
end = 17
for i in range(0,15):
r = np.sum(Red[start:end])
g = np.sum(Green[start:end])
b = np.sum(Blue[start:end])
start = end
end = end + 17
result_R.append(r) # edited
result_G.append(g) # edited
result_B.append(b) # edited

我注意到的下一件事是,startend在每个循环中都被修改,i不再在循环中使用,因此我们可以使用循环变量来简化这些索引的管理

# Colour Histogram
Blue = cv2.calcHist([img], [0], None, [256], [0,256])
Green = cv2.calcHist([img], [1], None, [256], [0,256])
Red = cv2.calcHist([img], [2], None, [256], [0,256])
result_R = []
result_G = []
result_B = []
STEP = 17
for start in range(0,255, STEP): # starting at 0 and in steps of 17 up to 256
end = start+STEP # equivelent to the start of the next loop
r = np.sum(Red[start:end])
g = np.sum(Green[start:end])
b = np.sum(Blue[start:end])
result_R.append(r)
result_G.append(g)
result_B.append(b) 

这使得代码更容易理解,但并不能完全解释1517来自哪里,基于np.sumstartend之间的距离表示仓大小,因此15最终是自15*17=255以来的仓数量,尽管我不完全确定,通过使用end=255,它实际上省略了序列的最后一个元素,所以如果图像都是白色的,我希望得到的直方图完全为空,我怀疑这是装仓算法的一个缺陷。

最新更新