1

我创建了用于计算直方图的三维矩阵,如下所示:

// 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);

并且似乎工作正常(代码已简化)。

由于直方图是从单个图像中采样的,因此可能会遇到采样问题(感兴趣的对象具有狭窄的颜色分布)。所以我想将高斯平滑应用于“值”直方图平面。我尝试获取直方图行,但它给了我另一个 3D Mat:

cv::Mat1f hrow = histogram.row(0); 
// hrow.dims ==3 && hrow.rows == -1 && hrow.cols == -1

而且我对处理它没有任何想法。

我无法解决这个问题,因为这个动作应该很简单。

任何意见是极大的赞赏。

4

0 回答 0