OpenCV calcHist函数。

时间:2015-03-04 15:14:38

标签: c++ opencv image-processing

我正在使用calcHist函数来计算图像的颜色直方图。我正在研究一个简单的图像匹配应用程序,我正在尝试使用颜色直方图作为图像描述符来查找类似的图像。

这是定义:

void calcHist(const Mat* images, int nimages, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize, const float** ranges, bool uniform=true, bool accumulate=false )

我的问题是关于 dims 参数。 这来自OpenCV文档:

  

dims - 直方图维度,必须为正且不大   比CV_MAX_DIMS(在当前的OpenCV版本中等于32)。

这可能是一个虚拟问题,但如果我将dims设置为1或3,结果之间有什么区别?如果我设置dims = 1 am我只得到图像中单个通道的直方图,或者这是一个代表1D向量中所有通道的直方图?

2 个答案:

答案 0 :(得分:2)

示例:4x4 HS(V)图像:

Hue频道:

1   170 33  14
15  133 33  7
122 90  100 142
1   170 33  14

饱和度渠道:

25  33  33  45
25  55  255  255
25  33  255  255
10  55  255  255

现在假设每个通道有3个直方图BINS:

HA = [0..60]
HB = [60..120]
HC = [120..180] 
 for H channel

SA = [0..80]
SB = [80..160]
SC = [160..255] 
 for S channel

现在区别了:

dim = 1会为每个通道制作一维直方图:

#HA = 9
#HB = 2
#HC = 5

#SA = 10
#SB = 0
#SC = 6

如果使用dim = 2,则获得通道间直方图:

-  HA HB HC
SA  5  1  4  
SB  0  0  0
SC  4  1  1

这是一个更详细的信息。

希望这是你问题的答案。

答案 1 :(得分:0)

dims参数用于指示您感兴趣的功能数量。对于" intesity"它可以是1以及更多的"渐变,方向"等