我想确定图像中对象的颜色。我能够确定物体的遮罩,并使用遮罩生成图像的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
每个人都展示了一种不同的方法。任何人都可以告诉我一种从直方图中确定颜色的简单方法吗?
答案 0 :(得分:0)
绘制直方图时,X轴作为我们的“箱”。如果我们构造一个256个二进制位的直方图,那么我们有效地计算每个像素值出现的次数。
相反,如果我们只使用2个(等间距)分档,那么我们计算像素在[0,128]或[128,255]范围内的次数。然后,在Y轴上绘制分箱到X轴值的像素数。
因此,如果您想获得最常见的颜色,则需要256个分区(对于256位图像)并计算条目数。