我想从重叠图像的点坐标(灰度)构建热图。我有我的点的x和y坐标。这个想法是很容易看到注意力/密度,点集中(红色区域,如果有重要的点数)。
我想我可以使用OpenCV。以下功能听起来很有趣:applyColorMap(src, result, cv::COLORMAP_JET);
。但我不知道如何将这张地图与点相关联,而不是与图像相关联。
有人知道如何从点坐标建立热图吗?
感谢@berak的代码并使用COLORMAP_RAINBOW
代替COLORMAP_JET
这是我获得的:
这接近我想要的结果,它似乎也是'#34;离散的"而不是"顺利" /"模糊"足够。我不想要点出现(特别是那些单独的#34;),我希望密度区域清楚地显示为here。
正如你们中的一些人所说,我认为我只是"需要更改投资回报率周围的像素强度。
有人有更多线索吗?
答案 0 :(得分:2)
这是我的想法, - 应用距离变换来可视化点密度:
// generate demo data, you will just set your pixels here:
RNG &ran(theRNG());
Mat img(300,300,CV_8U,Scalar(255)); // inverted b/w scheme
for ( int i=0; i<600; i++ )
{
int x=ran.uniform(0,300);
int y=ran.uniform(0,300);
img.at<uchar>(y,x) = 0;
}
Mat draw;
distanceTransform(img,draw,CV_DIST_L2,5);
// back from float to uchar, needs a heuristic scale factor here (10 works nice for the demo)
draw.convertTo(draw,CV_8U,10);
// cerr << draw(Rect(30,30,10,10)) << endl; // peek into the data, does it look good ?
applyColorMap(draw,draw, cv::COLORMAP_JET);
imshow("jetmap",draw);
waitKey();
答案 1 :(得分:1)
一种简单的方法是使用单通道图像(理想情况下,BPP比通常的8位图像更多),将其初始化为零,然后迭代所有点。然后,您将增加与每个点对应的像素,从而导致许多点下降的高值,以及没有点的低值。
可选地,如果你想要一个相当“模糊”的地图(很难找到一个正确的术语......),你不仅可以增加有点的所有像素,而且可以增加点周围的圆圈中的所有像素。
然后,您可以通过applyColorMap
将地图转换为灰度图像或彩色图像。