从2D数组C ++创建热图

时间:2020-06-06 08:00:17

标签: c++ image opencv

我有一个2D数组,可以采用以下值:0,1,3,5,8,16,27,49,86,149,273,499,898,1537

如何创建代表此离散值图像的图像(比如说热图)?

我没有找到任何简单的在线方法。 我不能做这样的事情:

void plotImage(const std::vector<short int>& image){
    int min_value = *min_element(image.begin(), image.end());
    int max_value = *max_element(image.begin(), image.end());
    float range =  max_value - min_value;
    // ... Don't know how to create heatmap
}

因为整数的范围不是线性的,所以所有较小的值(0,1,3,5,...)最终都为0


编辑

按照@ brc-dd的推荐,我使用了https://github.com/lucasb-eyer/libheatmap,但这并不是我想要的,因为我必须为此包装做

void Data::plotImage(int counter, const std::vector<short int>& image){

    heatmap_t* hm = heatmap_new(Nx, Ny);
    for(unsigned i = 0 ; i < image.size() ; ++i) {
        short int val = image[i];
        for (int j=0;j<val;j++){
            heatmap_add_point(hm, i%Nx, i/Nx);
        }
    }
    // ...
}

但这太昂贵了,因为我已经知道每个像素的值(热量),这样做我得到一个值,即1537,所以我循环添加相同的像素1537次,这没有意义

0 个答案:

没有答案