分别使用 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/...
推荐阅读
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- iOS中的Block
- Linux下面如何查看tomcat已经使用多少线程
- 使用composer自动加载类文件
- android|android studio中ndk的使用
- 使用协程爬取网页,计算网页数据大小