我有一个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次,这没有意义