计算彩色图像的HSV直方图是否与H-S直方图不同
Calculate HSV histogram of a coloured image is it different from H-S histogram?
我想计算图像的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 );
相关文章:
- 如何声明一个标准::提升直方图的向量?提升直方图的类型是什么?
- 二进制图像的空间直方图
- 如何在c++中仅使用for循环打印此代码的垂直直方图
- 创建直方图以显示每个类别/箱中带有星号的项目数量
- 打印带C++的直方图
- 将直方图的 2D 数组传递给函数 (C++)?
- 如何在OpenCV 3.4.7中计算CV_32FC1 cv::GpuMat图像的(范围)直方图
- 如何平行化直方图添加?
- 根C++直方图中的错误
- 动态分配许多 Boost::直方图对象
- 使用 OpenCV 原始指针和 lambda 作为直方图的不同结果
- 如何计算图像中每个块的直方图,然后将它们连接起来?
- C++:使用数组、指针和 for 循环制作直方图。我就在那里,我可能想得太辛苦了
- 将两个 1D 直方图合并为一个
- 使用STD :: MAP在直方图峰周围的平均值
- 使用标准库或Boost库从一组数据中计算直方图
- OPENCV MAT问题:直方图和此循环之间的差异
- 优化直方图更新
- 在OPENCV中归一化函数中的直方图
- 从直方图OPENCV中的峰中获取色调值