「python」用opencv画heatmap

做一个人群分析的代码,算法得到一个np.array的二维数组pred,存储了每个像素点的人数概率


1. 用这段代码可以直接根据pred画出热力图:

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

plot.imshow出来的热力图
2. 为了后续工作,需要用cv2来画。先上代码:

1
2
3
4
5
6
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(50)

cv2.imshow出来的热力图
3. 代码逻辑:

  • pred本身是二维数组,可以看作一个单通道灰度图。
  • pred的值都很小,而且是np.float64的浮点数,直接cv2.imshow出来的图就会是一片黑。
  • plt.imshow内部其实是对pred做了归一化操作然后应用了色彩映射才能呈现热力图的效果。
  • 所以在cv2中也需要做这两步才行:归一(cv2.normalize)和色彩映射(applyColorMap)
  • plt.imshow里面的cmap参数和cv2.applyColorMap里面的cv2.COLORMAP_JET参数用于指定色彩。具体配色情况搜索关键词 <matplotlib cmap> 即可

这样就可以用opencv的cv2.imshow来画出与matplotlib中的plt.imshow一样效果的热力图。