计算彩色图像的HSV直方图是否与H-S直方图不同?

时间:2013-11-17 08:54:20

标签: c++ opencv

我想计算图像的HSV直方图。我已经搜索了很多但没有发现任何有用的东西。在opencv在线指南中,我找到了H-S直方图。 V对照明有什么影响? HSV和H-S是否相同(意味着V对照明没有影响)?这是H-S直方图的代码

cvtColor( Frame, hsv_base, CV_BGR2HSV );
    int h_bins = 50; 
int s_bins = 32;
int histSize[] = { h_bins, s_bins };

float h_ranges[] = { 0, 256 };
float s_ranges[] = { 0, 180 };

const float* ranges[] = { h_ranges, s_ranges };
int channels[] = { 0, 1 };
calcHist( &hsv_base, 1, channels, Mat(), hist_base, 2, histSize, ranges, true, false );

1 个答案:

答案 0 :(得分:1)

我建议您阅读有关HSV的wiki页面。

但是为了快速回答,V组件基本上控制了颜色的亮度。因此,如果目标是创建颜色直方图,那么您可能不希望区分深绿色和浅绿色。

要回答您的问题,H-S仅指HSV图像的前两个通道。 如果你真的想要在3个通道中进行聚类,可以通过修改代码来对3个通道进行操作并在直方图中添加第三个维度来实现。但这可能不是你想要达到的目标。

cvtColor( Frame, hsv_base, CV_BGR2HSV );
int h_bins = 50; 
int s_bins = 32;
int v_bins = 10;
int histSize[] = { h_bins, s_bins, v_bins };

float h_ranges[] = { 0, 256 };
float s_ranges[] = { 0, 180 };
float v_ranges[] = { 0, 256 };

const float* ranges[] = { h_ranges, s_ranges, v_ranges };
int channels[] = { 0, 1, 2};
calcHist( &hsv_base, 1, channels, Mat(), hist_base, 3, histSize, ranges, true, false );
相关问题