分别使用 PIL 和 cv2 绘制人群密度图

pred变量是网络输出的单通道密度图。在绘制密度图时需要将其转化为cpu所支持的numpy格式。
1. 使用PIL绘制

import matplotlib.pyplot as plt plt.imshow(pred, cmap=plt.cm.jet) plt.show()

这种绘制方法会自带坐标系,而这个坐标系会占用图片的真实像素点,导致输出的密度图尺寸与输入图片的尺寸不一致。但如果只是查看密度效果,这个方法还是很推荐的。
2. 使用cv2绘制
import cv2 heatmapshow = None heatmapshow = cv2.normalize(pred, heatmapshow, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U) heatmapshow = cv2.applyColorMap(heatmapshow, cv2.COLORMAP_JET) cv2.imshow("Heatmap", heatmapshow) cv2.waitKey(0)

我们知道网络输出的pred矩阵中的值都很小,而且是np.float64的浮点数,而cv2处理的是[0,255]区间的数,所以如果直接用cv2展示或者保存,就是一张黑乎乎的图。
【分别使用 PIL 和 cv2 绘制人群密度图】plt.imshow内部其实是对pred做了归一化操作然后应用了色彩映射才能呈现热力图的效果。
所以在cv2中也需要做这两步才行:归一(cv2.normalize)和色彩映射(applyColorMap)
plt.imshow里面的cmap参数等价于cv2.applyColorMap里面的cv2.COLORMAP_JET参数,用于指定色彩。
参考:
https://blog.csdn.net/hxydip/...

    推荐阅读