我创建了用于计算直方图的三维矩阵,如下所示:
// Histogram of HSV image
int const hue_bins = 180; //
int const sat_bins = 256; //
int const val_bins = 4; // Only four bins for V channel!
float const hue_range[2] = {0, 180};
float const sat_range[2] = {0, 256};
float const val_range[2] = {0, 256};
int const hsv_sizes[] = {hue_bins, sat_bins, val_bins};
cv::Mat1f m_tone_frequences(3, hsv_sizes, 0.);
然后我正在使用
cv::calcHist
( &image, 1, channels, mask, histogram
, num_channels, hsv_sizes, ranges);
...
cv::calcBackProject
( &image_f, 1, channels, histogram
, backproject, hsv_sizes, 1.0);
似乎工作正常(代码简化)。
由于直方图是从单个图像中采样的,因此可能会遇到采样问题(感兴趣的对象具有窄的颜色分布)。所以我想将高斯平滑应用于“值”直方图平面。 我试过得到直方图行,但它给了我一个三维Mat:
cv::Mat1f hrow = histogram.row(0);
// hrow.dims ==3 && hrow.rows == -1 && hrow.cols == -1
我对处理它没有任何想法。
我无法解决这个问题,因为这个动作应该很简单。
非常感谢任何建议。