【问题标题】:Determine colour from HSV histogram从 HSV 直方图确定颜色
【发布时间】:2015-02-13 16:19:30
【问题描述】:

我想确定图像中对象的颜色。我能够确定对象的蒙版并使用蒙版生成图像的 HSV 直方图。

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, mask, hist_base, 3, histSize, ranges, true, false ); //mask is the mask of the object


每个人都展示了不同的方法。谁能告诉我一个简单的方法来确定直方图的颜色?

【问题讨论】:

  • 我认为this会帮助你
  • 我还找到了this,这可能会对您有所帮助。

标签: c++ opencv colors histogram


【解决方案1】:

绘制直方图时,X 轴用作我们的“箱”。如果我们用 256 个 bin 构建直方图,那么我们实际上是在计算每个像素值出现的次数。

相比之下,如果我们只使用 2 个(等间距)bin,那么我们计算的是像素在 [0, 128) 或 [128, 255] 范围内的次数。然后将绑定到 X 轴值的像素数绘制在 Y 轴上。

因此,如果您想获得最常见的颜色,则需要 256 个 bin(对于 256 位图像)并计算条目数。

【讨论】:

  • 你的意思是我应该只使用两个 bin 值,每个值都在 [0,128) 范围内?
  • 您的问题不清楚您真正想要实现的目标。 “确定颜色”可能意味着很多
  • 我想与颜色最相关的是色调和饱和度通道。根据您定义“相同/相似颜色”的方式,您可以选择尺寸或分类
  • 我想我可以更简单地问一下。我想基本上确定最基本的颜色,如红色、绿色、蓝色、粉红色等。我知道色调值可以给出这些颜色,但是我想问这个怎么写代码?
  • 如果你把它分成 256 个类别,你会得到每个 bin 有多少个值。例如,如果您有一个完全粉红色的图像,并将您的直方图分成 256 个类别,您将拥有所有粉红色的特定值的条目。如果您有一个复杂的图像,最大的数字将是最常见的颜色等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多