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

Calculate HSV histogram of a coloured image is it different from H-S histogram?

本文关键字:直方图 H-S 是否 HSV 计算 彩色图像      更新时间:2023-10-16

我想计算图像的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 );

我建议您阅读有关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, 180 };
float s_ranges[] = { 0, 256 };
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 );