来自Mat的Opencv直方图数据

时间:2015-12-12 22:16:40

标签: c++ opencv histogram lbph-algorithm

所以我试图从OpencCV中生成的直方图中获取实际数据。我正在使用位于here的代码,如下所示。但是,我并不完全知道如何从此Mat获取数据。我看到了这个post,但帖子使用hist.get(i, 0)来获取直方图数据。但是,我的直方图Mat只包含1行...和16384列。相关代码如下。

static Mat spatial_histogram(InputArray _src, int numPatterns,
                         int grid_x, int grid_y, bool /*normed*/)
{
    Mat src = _src.getMat();
    // calculate LBP patch size
    int width = src.cols/grid_x;
    int height = src.rows/grid_y;
    // allocate memory for the spatial histogram
    Mat result = Mat::zeros(grid_x * grid_y, numPatterns, CV_32FC1);
    // return matrix with zeros if no data was given
    if(src.empty())
        return result.reshape(1,1);
    // initial result_row
    int resultRowIdx = 0;
    // iterate through grid
    for(int i = 0; i < grid_y; i++) {
        for(int j = 0; j < grid_x; j++) {
            Mat src_cell = Mat(src, Range(i*height,(i+1)*height), Range(j*width,(j+1)*width));
            Mat cell_hist = histc(src_cell, 0, (numPatterns-1), true);
            // copy to the result matrix
            Mat result_row = result.row(resultRowIdx);
            cell_hist.reshape(1,1).convertTo(result_row, CV_32FC1);
            // increase row count in result matrix
            resultRowIdx++;
        }
    }
    // return result as reshaped feature vector
    return result.reshape(1,1);
}

result变为Mat,大小为1 x 16384,Mat中的值很稀疏......那么我如何获得正确的直方图数据呢?

0 个答案:

没有答案